Запрос не сортируется должным образом

#php #sql #sorting

#php #sql #сортировка

Вопрос:

У меня есть этот запрос, который я использую. Мне нужно отсортировать его по $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");
}

}
  

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

Комментарии:

1. поправьте меня, если я ошибаюсь… но вы упорядочиваете по «date_time_added». вы просто используете $variis для фильтрации «help_box.status»

2. Работает ли этот запрос вообще, или это просто «фильтр», который не работает?

3. @abdullahbattal да, все работает, кроме фильтра.

4. ok обновление: я выбрал поле «статус» и отобразил его. Для всех этих строк, которые возвращаются, статус «помощь не требуется», когда $variis на самом деле «нужна помощь».

5. Так в чем проблема? Неправильная сортировка элементов в результате или неправильные результаты?

Ответ №1:

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

Чтобы использовать предложение ORDER BY или LIMIT для сортировки или ограничения всего результата ОБЪЕДИНЕНИЯ, заключите в скобки отдельные операторы 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;
  

Ответ №2:

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

 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, используйте его в соединении

Комментарии:

1. привет, Матиас. спасибо, но он по-прежнему работает так же. схожу с ума, пытаясь выяснить причину. в запросе все работает, кроме этой функции сортировки.

2. таблица «help_box» … где она соединена?

Ответ №3:

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

Комментарии:

1. Нет, он имеет в виду «сортировать по», что имеет особенность в запросах ОБЪЕДИНЕНИЯ, которые рассматриваются в ответе dev-null.

2. Я все еще думаю, что он имеет в виду «фильтр»… Пожалуйста, прочтите комментарии под вопросом между Matias и AAA, спрашивающий тоже это признает.