2
+----------------------+
| post_id | message    |
+----------------------+
| 1       | message 1  |
+----------------------+
| 2       | message 2  |
+----------------------+

+----------+---------+-------------------------+
| reply_id | post_id |message                  |
+----------+---------+-------------------------+
|    1     |    1    |  reply 1 to message 1   |
+----------+---------+-------------------------+
|    2     |    1    |  reply 2 to message 1   |
+----------+---------+-------------------------+
|    3     |    1    |  reply 3 to message 1   |
+----------+---------+-------------------------+
|    4     |    2    |  reply 1 to message 2   |
+----------+---------+-------------------------+

この2つのテーブル名を取得postpost_repliespost_idテーブル内post_repliesはテーブル内のFkからPkpost です。私がしたいのは、投稿メッセージを見つけることで、1列のみとして返信します

私がこのようなものを実行した場合:

SELECT p.message, pr.message FROM `posts` AS p LEFT JOIN post_replies AS pr ON p.post_id = pr.post_id

このようなものが返されます

+-----------+-------------------------+
| message   |   message               |
+-----------+-------------------------+
| message 1 |  reply 1 to message 1   |
+-----------+-------------------------+
| message 1 |  reply 2 to message 1   |
+-----------+-------------------------+
| message 1 |  reply 3 to message 1   |
+-----------+-------------------------+
| message 2 |  reply 1 to message 2   |
+-----------+-------------------------+

このような結果を得る方法はありますか:

+-------------------------+
|   message               |
+-------------------------+
|   message 1             |
+-------------------------+
|  reply 1 to message 1   |
+-------------------------+
|  reply 2 to message 1   |
+-------------------------+
|  reply 3 to message 1   |
+-------------------------+
|   message 2             |
+-------------------------+
|  reply 1 to message 2   |
+-------------------------+

私が走れば

SELECT p.message FROM `posts` AS p LEFT JOIN post_replies AS pr ON p.id = pr.post_id

postこれはテーブルからメッセージを返します

または

SELECT pr.message FROM `posts` AS p LEFT JOIN post_replies AS pr ON p.id = pr.post_id

post_repliesこれはテーブルからのみメッセージを返します

とにかくそれは可能ですか?

どんな助けでも大歓迎です

4

2 に答える 2

6

提供した 2 つのクエリを UNION し、正しい順序を導入します。

SELECT * FROM (
  SELECT p.id, 0 x, p.message
  FROM posts AS p
  LEFT JOIN post_replies AS pr ON p.id = pr.post_id
  UNION ALL
  SELECT p.id, pr.id, pr.message
  FROM posts AS p
  LEFT JOIN post_replies AS pr ON p.id = pr.post_id
) x
ORDER BY 1, 2

重複したくない場合は、「UNION ALL」を単に「UNION」に変更してください。

于 2013-01-06T12:56:59.847 に答える
2

これはあなたが望んでいないことを知っていますが、これで問題が解決する場合は投稿してください

$クエリ

SELECT 
    group_concat(pr.message SEPARATOR '|'), p.message,  
FROM 
    `posts` AS p 
LEFT JOIN 
    post_replies AS pr ON p.post_id = pr.post_id 
GROUP BY
    pr.post_id


+-----------+----------------------------------------------------------------------------+
| message   |   message                                                                  |
+-----------+----------------------------------------------------------------------------+
| message 1 |  reply 1 to message 1 | reply 2 to message 1  | reply 3 to message 1       |
+-----------+----------------------------------------------------------------------------+
于 2013-01-06T12:57:01.550 に答える