查询未正确排序
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 未正确排序