0

これが私がやろうとしていることですが、それが可能かどうか疑問があります!

私は2つのテーブルを持っています。1つはと呼ばれusers、もう1つはですanswers。結果を1つのステートメントに結合し、テーブルを。で並べ替える必要がありますtime。トリッキーな部分は、time両方のテーブルにあり、結果を並べ替えるために両方のtimeフィールドを考慮する必要があることです。

これは、クエリを思い付くのに失敗した試みです。

SELECT * FROM ( SELECT id, username, first_name, last_name, time FROM users
UNION ALL
  SELECT id, answer, pid, uid, time FROM answers ) as AB
ORDER BY `AB.time`

アップデート

私は次のSQLクエリを思いついた:

 SELECT username AS user, '' as page , '' as content , time FROM users 
UNION ALL
  SELECT (SELECT username FROM users WHERE `id`=`uid`) AS user, pid AS page, answer AS content, time FROM answers 
ORDER BY `time` DESC

それは私が探しているものですが、何らかの理由でuser2番目のSELECTクエリのフィールドはnull!として表示されています。なぜですか?

4

2 に答える 2

2
 SELECT id, username, first_name, last_name, time FROM users
UNION ALL
  SELECT id, answer, pid, uid, time FROM answers 
ORDER BY 'time`

テーブルごとに異なる列名を持つソリューション

SELECT id         AS t1_id, 
       username   AS t1_username, 
       first_name AS t1_first_name, 
       last_name  AS t1_last_name, 
       NULL       ast2_id, 
       NULL       AS t2_answer, 
       NULL       AS t2_pid, 
       NULL       AS t2_uid, 
       time 
FROM   users 
UNION ALL 
SELECT NULL   AS t1_id, 
       NULL   AS t1_username, 
       NULL   AS t1_first_name, 
       NULL   AS t1_last_name, 
       id     ast2_id, 
       answer AS t2_answer, 
       pid    AS t2_pid, 
       uid    AS t2_uid, 
       time 
FROM   answers 
ORDER  BY time 
于 2012-06-06T08:56:36.920 に答える
1

users.id とanswers.uidが同じであると想定されている場合、これは機能するはずです:

SELECT u.*, a.* FROM users AS u
    JOIN answers AS a ON a.uid = u.id
    ORDER BY a.time
于 2012-06-06T08:57:52.783 に答える