查询未正确排序

Posted

技术标签:

【中文标题】查询未正确排序【英文标题】:Query is not being sorted properly 【发布时间】:2011-10-24 20:29:19 【问题描述】:

我正在使用这个查询。我需要按$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

【问题讨论】:

如果我错了,请纠正我...但是您是按“date_time_added”订购的。您只是在使用 $variis 过滤“help_box.status” 此查询是否有效,还是只是“过滤器”无效? @abdullahbattal 是的,除了过滤器之外,一切正常。 确定更新:我选择了“状态”字段并显示它。对于返回的所有这些行,当 $variis 实际上是“需要帮助”时,状态是“不需要帮助”。 那么问题出在哪里?结果中的项目排序错误或结果错误? 【参考方案1】:

请阅读手册: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;

【讨论】:

【参考方案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' 

不要在 where 子句中使用 *and help_box.status = '$variis'*,而是在连接中使用它

【讨论】:

嘿,马蒂亚斯。谢谢,但它仍然以相同的方式工作。疯狂地试图找出原因。除了这个排序函数之外,查询中的一切都在工作。 表“help_box”...它在哪里连接?【参考方案3】:

我相信“排序”是指“过滤”。 每次在 WHERE 子句中需要 help_box.status 时,都应该在 FROM 子句中包含 help_box 表。只有这样它才能运行。

【讨论】:

不,他的意思是“排序依据”,这在 UNION 查询中具有特殊性,dev-null 的答案涵盖了这一点。 我仍然认为他的意思是“过滤器”......请阅读Matias和AAA之间的问题下方的cmets,提问者也承认。

以上是关于查询未正确排序的主要内容,如果未能解决你的问题,请参考以下文章

sql查询中的“ORDER BY meta_value ASC”未正确排序价格

MariaDB ROW_NUMBER 与 ORDER BY 未正确排序

“BY 变量未正确排序”错误,尽管它已经排序

可排序、可拖动、可排序的表 + mvc 未正确更新顺序

按计数排序未正确排序 - SQL (MS Access 2007)

NSSortDescriptor 未正确排序整数