Reputation:
I've this MySQL
query to return some data from my database, but for some reason, it's returning only the first row, what can I be doing wrong?
SELECT `a`.`id` AS topic_id, `a`.`text` AS topic_text,
`a`.`date` AS topic_date, `b`.`name` AS author_name,
`b`.`picture` AS author_picture, `b`.`facebook_id` AS author_facebook_id,
SUM(CASE WHEN c.topic_id IS NOT NULL THEN 1 ELSE 0 END) AS topic_likes_number,
SUM(CASE WHEN c.topic_id IS NOT NULL AND c.author_id = 1 THEN 1 ELSE 0 END) AS topic_liked,
SUM(CASE WHEN d.topic_id IS NOT NULL THEN 1 ELSE 0 END) AS topic_dislikes_number,
SUM(CASE WHEN d.topic_id IS NOT NULL AND c.author_id = 1 THEN 1 ELSE 0 END) AS topic_disliked,
SUM(CASE WHEN e.topic_id IS NOT NULL THEN 1 ELSE 0 END) AS topic_comments_number
FROM (`topics` AS a)
INNER JOIN `users` AS b ON `b`.`id` = `a`.`author_id`
LEFT JOIN `topics_likes` AS c ON `c`.`topic_id` = `a`.`id`
LEFT JOIN `topics_dislikes` AS d ON `c`.`topic_id` = `a`.`id`
LEFT JOIN `comments` AS e ON `e`.`topic_id` = `a`.`id`
LIMIT 50
This is what I was expecting (multiple topics):
Array
(
[0] => Array
(
[topic_id] => 1
[topic_text] => Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.
[topic_date] => 0000-00-00 00:00:00
[author_name] => Claudius Ibn
[author_picture] => 356a192b7913b04c54574d18c28d46e6395428ab.jpg
[author_facebook_id] => 100003268692398
[topic_likes_number] => 1
[topic_liked] => 1
[topic_dislikes_number] => 0
[topic_disliked] => 0
[topic_comments_number] => 0
)
[1] => Array
(
[topic_id] => 2
[topic_text] => Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.
[topic_date] => 0000-00-00 00:00:00
[author_name] => Claudius Ibn
[author_picture] => 356a192b7913b04c54574d18c28d46e6395428ab.jpg
[author_facebook_id] => 100003268692398
[topic_likes_number] => 1
[topic_liked] => 1
[topic_dislikes_number] => 0
[topic_disliked] => 0
[topic_comments_number] => 0
)
[2] => Array
(
[topic_id] => 3
[topic_text] => Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.
[topic_date] => 0000-00-00 00:00:00
[author_name] => Claudius Ibn
[author_picture] => 356a192b7913b04c54574d18c28d46e6395428ab.jpg
[author_facebook_id] => 100003268692398
[topic_likes_number] => 1
[topic_liked] => 1
[topic_dislikes_number] => 0
[topic_disliked] => 0
[topic_comments_number] => 0
)
[...]
)
And this is what I'm getting (one topic):
Array
(
[0] => Array
(
[topic_id] => 1
[topic_text] => Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui.
[topic_date] => 0000-00-00 00:00:00
[author_name] => Claudius Ibn
[author_picture] => 356a192b7913b04c54574d18c28d46e6395428ab.jpg
[author_facebook_id] => 100003268692398
[topic_likes_number] => 1
[topic_liked] => 1
[topic_dislikes_number] => 0
[topic_disliked] => 0
[topic_comments_number] => 0
)
)
Solution: Just add a group_by a.id
Upvotes: 0
Views: 252
Reputation: 5239
This line seems wrong, even if it may not be your problem:
LEFT JOIN `topics_dislikes` AS d ON `c`.`topic_id` = `a`.`id`
Upvotes: 2