Eine Abfrage, die alle Beiträge zurückgibt, zusammen mit wie oft es angesehen wurde, und wie viele Likes der Beitrag haben. Problem ist es Duplikate zurück, weil einer anderen beitreten i in Frage habenMysql beitreten distinct
SELECT count(bv.postId) as views, SUM(if(vote=1, 1, 0)) as likes, SUM(if(vote=-1, 1, 0)) as meeh, GROUP_CONCAT(taxonomy_id) as target, GROUP_CONCAT(t.name) as tname, `t`.`type` as `ttype`, `users`.`fullname`, `users`.`picture`, `users`.`role`, `users`.`picture`, `blog`.* FROM `blog`
INNER JOIN `blog_taxonomy` `bt` ON `bt`.`blog_id` = `blog`.`id`
INNER JOIN `users` ON `users`.`id` = `blog`.`user_id`
INNER JOIN `taxonomy` `t` ON `t`.`id` = bt.`taxonomy_id`
LEFT JOIN `blog_views` `bv` ON `blog`.`id` = `bv`.`postId`
WHERE MONTH(blog.time_posted) = 4 AND `blog`.`deleted` =0 GROUP BY `blog`.`id` ORDER BY `blog`.`id` DESC
blog_views Tabelle ist eine einfache Tabelle i zu halten verwenden, um Spur, der sah, was für Post, und wenn er es will oder nicht
Table:blog_views
postId userId vote[int values, 1 for like, -1 for dislike and 0 default]
Problem ist Anzahl der Aufrufe immer zurück n * Anzahl der Blog_taxonomie Tabelle! was ich benutze, um Tags auf Post zu steuern.
Table blog_taxonomy:
taxonomy_id post_id
1 1
2 1
Table Taxonomy
id name
1 art
2 music
dies ist eine viel zu viele Tabelle verwendet, um Beiträge mit Tags zu verknüpfen. lösen das Problem, das es von Abfrage zu entfernen :(aber ich brauche es dort!
i bv.postId in der Gruppe Hinzufügen versucht durch, aber es scheint, überhaupt keine Wirkung zu haben!
in normal, ich kann erhalten Ansichten Daten ich möchte einen Beitrag
select count(bv.postId) as views, SUM(if(vote=1, 1, 0)) as likes, SUM(if(vote=-1, 1, 0)) as meet from blog_views where postId = ?{blog.id}
group by postId
mit, was ich hier fehle?
bearbeiten
Mit der Unterabfrage wurde das Problem behoben. Warum funktioniert die Unterabfrage-Methode und funktioniert die Verknüpfung nicht?
SELECT bv.views, bv.likes, bv.meeh, GROUP_CONCAT(taxonomy_id) as target, GROUP_CONCAT(t.name) as tname, `t`.`type` as `ttype`, `users`.`fullname`, `users`.`picture`, `users`.`role`, `users`.`picture`, `blog`.* FROM `blog`
INNER JOIN `blog_taxonomy` `bt` ON `bt`.`blog_id` = `blog`.`id`
INNER JOIN `users` ON `users`.`id` = `blog`.`user_id`
INNER JOIN `taxonomy` `t` ON `t`.`id` = bt.`taxonomy_id`
LEFT JOIN (select count(*) as views,postId,SUM(if(vote=1, 1, 0)) as likes, SUM(if(vote=-1, 1, 0)) as meeh from `blog_views` group by postId) `bv` ON `bt`.`blog_id` = `bv`.`postId`
WHERE MONTH(blog.time_posted) = 4 AND `blog`.`deleted` =0 GROUP BY `blog`.`id` ORDER BY `blog`.`id` DESC
von welcher Tabelle kommt taxonomy_id? –
@ KP. blog_taxonomie – Zalaboza
Es scheint mir, Sie haben Ihre eigene Frage beantwortet. Wenn Sie immer noch verwirrt sind, feuern Sie dieselben Abfragen ohne die äußeren Aggregatfunktionen und die group by-Klausel. – Strawberry