0

テーブル:

ヘルプ(重要なのはidフィールドとfechaフィールドです)

ここに画像の説明を入力してください

共有ヘルプ(日付が異なる他のユーザーによって参照されるヘルプ)

ここに画像の説明を入力してください

それで、

ユーザーからのすべてのヘルプ(user_id = 1)

SELECT * FROM helps WHERE id_user = 1

すべてはユーザーと彼が参照したものから助けます

SELECT * FROM helps where id_user = 1 or id IN (SELECT helpid FROM shared_helps WHERE userid = 1)

皆さんはそれが非常に醜いクエリだと思うでしょう(私に光を見せてくれるといいのですが)が、それは私が望む結果を示しているようです。問題は、この方法でshared_helps.fechaが無視されるため、ORDER BYに影響がないことです。これを実現するにはどうすればよいですか?

4

2 に答える 2

2
SELECT
  helps.*
FROM
  helps
LEFT JOIN
  shared_helps
    ON  shared_helps.helpid = helps.id
    AND shared_helps.userid = 1
WHERE
     helps.id_user = 1
  OR shared_helps.userid = 1
ORDER BY
  CASE WHEN helps.id_user = 1 THEN 0 ELSE 1 END,
  shared_helps.fecha

編集

あなたのコメントに基づいて、これを試してください...

ORDER BY
  COALESCE(shared_helps.fecha, helps.fecha)

またはおそらくこれ...

ORDER BY
  helps.fecha

正直なところ、あなたが何を必要としているかは100%わかりません。おそらく、いくつかのサンプルデータと、そのサンプルデータに必要な出力を含めることができますか?

于 2012-10-09T12:28:21.250 に答える
0

これがお役に立てば幸いです。次の方法で試してください。

SELECT*FROMは
INNERJOINshared_helps ONhelps.user_id = shared_helps.user_id WHEREhelps.user_id = 1
ORDER BY shared_helps.fecha ASC|DESCを支援します

于 2012-10-09T12:27:51.703 に答える