私はこれを説明するのに苦労しており、これを本来よりも難しくしている可能性が非常に高いです...
基本的に、ピン/投稿で満たされたページがあり、ユーザーはそれらに賛成票または反対票を投じることができます。1 つのクエリで、ピンのリストを取得したいだけでなく、2 つのテーブルを結合して、ユーザーがそれらに賛成票を投じたか反対票を投じたかを確認したいと考えています。
テーブル構造:
pins table
| id | title |
+------+-------------------+
1 Post 1
2 Post 2
3 Post 3
4 Post 4
user_upvotes table
| id | user_id | pin_id |
+------+-----------+----------+
1 1 2
2 2 1
3 2 3
4 2 1
user_downvotes table
| id | user_id | pin_id |
+------+-----------+----------+
1 2 2
2 1 1
3 1 3
4 1 1
これが私が試したクエリですが、ページ上のピンが複製されてしまいます。
SELECT pins.id AS pin_id, title, user_upvotes.id AS upvote, user_downvotes.id AS downvote
FROM pins
LEFT JOIN user_upvotes ON user_upvotes.pin_id = pins.id AND user_upvotes.user_id = 2
LEFT JOIN user_downvotes ON user_downvotes.pin_id = pins.id AND user_downvotes.user_id = 2
これにより、次のようになります (pin_id 1 が 2 回繰り返されることに注意してください)。
| pin_id | title | upvote | downvote |
| 1 | Post 1 | (NULL) | 2 |
| 1 | Post 1 | (NULL) | 4 |
| 2 | Post 2 | 1 | (NULL) |
| 3 | Post 3 | (NULL) | 3 |
| 4 | Post 4 | (NULL) | (NULL) |
この時点から、値が NULL かどうかを確認し、そうでない場合は css クラスをアタッチして、賛成票または反対票を投じたことを示します。
基本的に、ピンが複製されることなく、上記の結果が必要です。これを行うためのより良い方法があれば、それも教えてください。