0

私は次の問題を抱えています:

ユーザーが投稿、ユーザー名、または電子メールのいずれかを検索できる検索ボックスがあります。

投稿は私の投稿テーブルにあり、ユーザーは私のユーザーテーブルにあります。テーブルの構造は次のとおりです。

投稿

post_id user_idpostpost_dateが表示されます

ユーザー

ユーザーIDユーザー名メール名姓

1つのクエリで両方のテーブルから結果を取得できますか?それが私にどのように役立つかわからない(もしあれば)、ただ尋ねてください。

次に、結果を同じページに表示する必要がありますが、最初に投稿し、ユーザーの後に投稿します。ご覧のとおり、投稿には表示するデータが異なり、ユーザーには異なるデータが表示されます。

group by clausuleが存在することを知っているので、最初に投稿を取得し、次にユーザーを取得するために、結果をグループ化したいと思います。

このクエリの作成にご協力いただければ幸いです。

よろしく、ゾレリ

4

2 に答える 2

0

テーブルが両方とも同一のスキーマである場合、次のことができます。

SELECT fields from posts where (yadda = 1)
UNION 
SELECT fields from users where (yadda = 1)

ただし、テーブルのスキーマとデータ型が異なるため、これは不可能です(つまり、post_dateはおそらく日時ですが、usersテーブルの対応するフィールドは文字列であるfirstnameです)

理論的には、投稿またはユーザーに対してのみ条件付きで入力されるダミーフィールドを設定することで、これを回避できます...

SELECT 'P' as result_type, post_id, user_id, post_date, visible, NULL as username, NULL as email, NULL as firstname, NULL as lastname from posts where (yadda = 1)
UNION ALL
SELECT 'U', NULL, userid, NULL, NULL, username, email, firstname, lastname from users where (yadda = 1)

しかし、これは物事を行うためのかなりくだらない方法です。より多くのデータを転送しているので、ロジックをコーディングして、それがどのような行であるかを確認し、関連するフィールドに問い合わせる必要があります。

したがって、簡単な答えは、2つの別々のクエリを発行することです。

上記をお勧めするのは、複雑なデータベースベースの並べ替え順序がある場合のみです。つまり、投稿レコードをユーザーレコードとマージする必要があります。あなたの質問から、これはありそうもないように聞こえます。

于 2012-06-19T00:13:25.143 に答える
0

このようなものは機能しますが、あまりエレガントなソリューションではありません。

SELECT q.post_id, q.post_user_id, q.post, q.post_date, q.post_visible,
       q.user_id, q.username, q.user_email, q.user_first, q.user_last
FROM   (
       SELECT post_id, user_id AS post_user_id, post, post_date, visible AS post_visible,
              0 AS user_id, "" AS username, "" AS user_email, "" AS user_first, "" AS user_last
       FROM   posts
       WHERE  post like ?
  UNION
       SELECT 0 AS post_id, "" AS post_user_id, "" AS post, "" AS post_date, 0 AS post_visible,
              userid AS user_id, username, email AS user_email, firstname AS user_first, lastname AS user_last
       FROM   users
       WHERE  username like ?
       OR     email like ?
       ) q
ORDER BY q.post_id DESC
于 2012-06-19T00:15:27.150 に答える