Запрос не сортируется должным образом - PullRequest
1 голос
/ 25 октября 2011

У меня есть этот запрос, который я использую.Мне нужно отсортировать его по $variis, но, похоже, сортировка не работает.Я дважды проверил имена полей и таблиц.Все правильно, но оно не будет отсортировано по $variis:

Код:

//Unseen
$variis = "Need Help";
$myid = This is the user's id;

$sql = "select car_help.car_id, agent_names.agent_name, help_box.status, 
car_help.why_car, car_help.date_time_added, car_help.just_date, 
car_help.type, agent_names.agent_id
from car_help LEFT JOIN agent_names on car_help.agent_whois = agent_names.agent_id 
where agent_names.system_id = '$myid' and car_help.system_id='$myid' 
and added_by <> '$myid' and help_box.status = '$variis'
UNION
select magazine_help.note_id, agent_names.agent_name, help_box.status, 
magazine_help.note_name, magazine_help.date_time_added, 
magazine_help.just_date, magazine_help.type, agent_names.agent_id
from magazine_help LEFT JOIN agent_names on 
magazine_help.agent_id = agent_names.agent_id 
where agent_names.system_id='$myid' and 
magazine_help.system_id = '$myid' and added_by <> '$myid' 
and help_box.status = '$variis'
UNION
select motorcycle_help.rand_id, agent_names.agent_name, 
help_box.status, motorcycle_help.rand_name, motorcycle_help.date_time_added,     
motorcycle_help.just_date, motorcycle_help.type, agent_names.agent_id
from motorcycle_help LEFT JOIN agent_names ON 
motorcycle_help.by_who = agent_names.agent_id
where agent_names.system_id = '$myid' and 
motorcycle_help.system_id='$myid' and added_by <> '$myid' 
and help_box.status = '$variis'
UNION
select mobile_questions.bal_test_id, agent_names.agent_name, 
help_box.status, mobile_questions.bal_why, mobile_questions.date_time_added,   
mobile_questions.just_date, mobile_questions.type, agent_names.agent_id
from mobile_questions LEFT JOIN agent_names ON 
mobile_questions.agent_who_ordered = agent_names.agent_id
where agent_names.system_id = '$myid' and 
mobile_questions.system_id='$myid' and added_by <> '$myid' 
and help_box.status = '$variis'
ORDER BY date_time_added DESC LIMIT $startrow, 20";

$result = mysql_query($sql);

$query = mysql_query($sql) or die ("Error: ".mysql_error());


if ($result == "")
{
echo "";
}
echo "";


$rows = mysql_num_rows($result);

if($rows == 0)
{
print("");

}
elseif($rows > 0)
{
while($row = mysql_fetch_array($query))
{

$row1 = $row['row_name'];


print("$row1");
}

}

Хорошо, обновление: я выбрал поле status и отобразил его.Для всех этих строк, которые возвращаются, статус no help needed, когда $variis фактически need help

Ответы [ 3 ]

4 голосов
/ 25 октября 2011

Пожалуйста, прочитайте инструкцию: http://dev.mysql.com/doc/refman/5.1/en/union.html

Чтобы использовать предложение ORDER BY или LIMIT для сортировки или ограничения всего результата UNION, заключите в скобки отдельные операторы SELECT и поместите ORDER BY или LIMIT после последнего. В следующем примере используются оба предложения:

(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;
1 голос
/ 25 октября 2011

попробуйте это:

from magazine_help LEFT JOIN agent_names on 
magazine_help.agent_id = agent_names.agent_id **and help_box.status = '$variis'**
where agent_names.system_id='$myid' and 
magazine_help.system_id = '$myid' and added_by <> '$myid' 

вместо использования * и help_box.status = '$ variis' * в предложении where используйте его в соединении

0 голосов
/ 25 октября 2011

Я полагаю, под "сортировкой" вы подразумеваете "фильтр". Вы должны включать таблицу help_box в ваше предложение FROM каждый раз, когда вам нужно help_box.status в вашем предложении WHERE. Только тогда он может бежать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...