0

以下のコードは、5 つのテーブルを結合し、date_timed_added でソートすることを想定しています。4つのテーブルのみを結合すると、クエリは完全に機能しました。4 番目のテーブルの後、何らかの理由で問題が発生しました。問題は、最初に 5 番目のテーブルを並べ替えて表示し、次に残りのテーブルを表示することです。他のすべてのテーブルを照会して、date_time_added を適切にソートするように修正するにはどうすればよいですか?

//$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');

 }

 }

 }
4

2 に答える 2

2

MySQL ドキュメントに従って: http://dev.mysql.com/doc/refman/5.0/en/union.html

ENTIRE 結果セットを並べ替える場合は、各クエリを括弧で囲んで、ORDER BY 句を UNION の LAST クエリに配置する必要があります。

(SELECT ...)
UNION
(SELECT ...)
ORDER BY ...
于 2012-05-05T01:37:55.373 に答える
0

このようにする必要があります。

SELECT Tbl1.field1
    FROM ( SELECT field1 FROM table1
           UNION
           SELECT field1 FROM table2
         ) Tbl1
    ORDER BY Tbl1.field1
于 2012-05-05T01:31:28.150 に答える