1
私は3つのテーブルを持っています:写真、ユーザー、投票。 私は、ユーザー名と投票してすべての写真を取得したい:MySQL JOIN空のテーブルは1行だけ返します
SELECT
`f`.`Photo`,
`u`.`Name`,
`u`.`Surname`,
COUNT(`h`.`Id`) AS `Votes`
FROM
`photos` `f`
JOIN
`users` `u`
ON
`f`.`UserId` = `u`.`Id`
LEFT JOIN
`votes` `h`
ON
`f`.`Id` = `h`.`PhotoId`
WHERE
`f`.`Show` = '1'
GROUP BY
`h`.`PhotoId`
データ:
photos:
---------------------------
|Id | Photo | UserId |
---------------------------
|1 | pic1.jpg | 1 |
---------------------------
|2 | pic2.jpg | 2 |
---------------------------
|3 | pic3.jpg | 3 |
---------------------------
users:
---------------------------
|Id | Name | Surname|
---------------------------
|1 | User1 | Sur1 |
---------------------------
|2 | User2 | Sur2 |
---------------------------
|3 | User3 | Sur3 |
---------------------------
votes (is empty):
---------------------------
|Id | PhotoId | Date |
---------------------------
上記のクエリが何票がないだけ1行、返します。
を
Photo | Name | Surname | Votes
-------------------------------------
pic1.jpg | User1 | Sur1 | 0
-------------------------------------
しかし、私はすべての3つの行を取得したいと思います電子写真):
-------------------------------------
Photo | Name | Surname | Votes
-------------------------------------
pic1.jpg | User1 | Sur1 | 0
-------------------------------------
pic2.jpg | User2 | Sur2 | 0
-------------------------------------
pic3.jpg | User3 | Sur3 | 0
-------------------------------------
解決済み:GROUP BY句はf
である必要があります。 Id
ではなく、h
です。 PhotoId
:
SELECT
`f`.`Photo`,
`u`.`Name`,
`u`.`Surname`,
COUNT(`h`.`Id`) AS `Votes`
FROM
`photos` `f`
JOIN
`users` `u`
ON
`f`.`UserId` = `u`.`Id`
LEFT JOIN
`votes` `h`
ON
`f`.`Id` = `h`.`PhotoId`
WHERE
`f`.`Show` = '1'
GROUP BY
`f`.`Id`
そこの 'f.Show'は重要ですか? –
@ Rayのコメントで増幅するには、 'f.show'が1つの写真行に対して' 1'であれば、1行だけ戻ってくるでしょう。 –
回答者に感謝しますが、私はGROUP BY句で間違いを犯しました。 –