Php 如何正确地使用具有Order BY的Union?
我下面的代码连接了5个表,然后按照添加的日期进行排序。如果我只连接4个表,查询就可以完美地工作。由于某种原因,在第四桌之后,它给了我一些问题。问题是它首先排序并显示第5个表,然后显示其余的表。如何修复它,以便它通过查询所有其他表对添加的日期\时间\进行正确排序Php 如何正确地使用具有Order BY的Union?,php,mysql,sql-order-by,union,Php,Mysql,Sql Order By,Union,我下面的代码连接了5个表,然后按照添加的日期进行排序。如果我只连接4个表,查询就可以完美地工作。由于某种原因,在第四桌之后,它给了我一些问题。问题是它首先排序并显示第5个表,然后显示其余的表。如何修复它,以便它通过查询所有其他表对添加的日期\时间\进行正确排序 //$sid is a variable that is drawn from DB $sql = "select `client_visit`.`visit_id`, `client_visit`. `why_visit`, `cli
//$sid is a variable that is drawn from DB
$sql = "select `client_visit`.`visit_id`, `client_visit`.
`why_visit`, `client_visit`.`date_time_added`, `client_visit`.
`just_date`, `client_visit`.`type` from `client_visit` where
`client_visit`.`system_id` = '$sid' and `client_visit`.
`added_by` = '$sid'
UNION
select `client_notes`.`note_id`, `client_notes`.`note_name`,
`client_notes`.`date_time_added`, `client_notes`.`just_date`
, `client_notes`.`type` from `client_notes` where `client_notes`.
`added_by` = '$sid'
UNION
select `client_conditions`.`med_id`, `client_conditions`.`med_name`,
`client_conditions`.`date_time_added`, `client_conditions`.`just_date`,
`client_conditions`.`type` from `client_conditions` where
`client_conditions`.`system_id` = '$sid' and `client_conditions`.
`added_by` = '$sid'
UNION
select `client_stats`.`stat_test_id`, `client_stats`.`stat_why`,
`client_stats`.`date_time_added`, `client_stats`.`just_date`,
`client_stats`.`type`
from `client_stats` where `client_stats`.`system_id` = '$sid'
and `client_stats`.`added_by` = '$sid'
UNION
select `client_documents`.`doc_id`, `client_documents`.`doc_name`,
`client_documents`.`date_time_added`, `client_documents`.`just_date`,
`client_documents`.`type` from `client_documents` where `client_documents`.
`system_id` = '$sid' and `client_documents`.`added_by` = '$sid'
ORDER BY `date_time_added` DESC LIMIT $startrow, 20";
$query = mysql_query($sql) or die ("Error: ".mysql_error());
$result = mysql_query($sql);
if ($result == "")
{
echo "";
}
echo "";
$rows = mysql_num_rows($result);
if($rows == 0)
{
}
elseif($rows > 0)
{
while($row = mysql_fetch_array($query))
{
//Just using these two variables i can display the same row info
//for all the other tables
$stuffid = htmlspecialchars($row['visit_id']);
$title = htmlspecialchars($row['why_visit');
}
}
}
像这样的事情应该做
SELECT Tbl1.field1
FROM ( SELECT field1 FROM table1
UNION
SELECT field1 FROM table2
) Tbl1
ORDER BY Tbl1.field1
根据MySQL文档:
如果要对整个结果集进行排序,必须将order BY子句放在UNION中的最后一个查询上,每个查询都用括号括起来
(SELECT ...)
UNION
(SELECT ...)
ORDER BY ...
警告:您的代码可能容易受到sql注入攻击。添加一些别名以缩小查询范围如何?它们正在被正确地清理。我没有把它放在那里。@gabrielsantos不知道你的眼睛为什么痛!不知道别名是什么意思…
选择cv.visit\u id,cv.why\u visit,cv.date\u time\u added,cv.just\u date,cv.type FROM client\u visit AS cv,其中cv.system\u id=“$sid”和cv.added\u by=“$sid”UNION[…]
谢谢Marc。我试过了,但它仍然显示出同样的结果。通过修复其他东西使它起作用。现在还可以。谢谢