#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, спрашивающий тоже это признает.