希望我能得到一些幫助解決這個問題。我有三個表格,一個有稱爲op_ideas的帖子(想法)。我有另一個名爲op_idea_votes的表。這些可以通過idea_id鏈接。mySQL查詢計數,選擇三個表
當一個想法發佈時,民間可以對這個想法進行投票。 op_idea_votes然後更新與最新的投票。
然後我有另一個名爲op_organs的表,根據發佈的用戶類型不同,該表可能也可能不是空的。所以這個表通過POST_TYPE(這是op_organs表的id)鏈接到op_organs.organ_id。
我需要選擇所有這些表來創建一個包含所有要顯示的信息的行,這些信息需要通過idea_id和post_type鏈接。但是我還需要在op_idea_vote表的3列上進行COUNT(同意,不同意,棄權)。
我已經厭倦了UNION,用SUM(CASE選擇,但我不能得到預期的影響。LEFT和INNER JOIN的,但我似乎得到的東西錯了,因爲部分或全部信息的丟失。
的應用程序是在JavaScript和PHP,所以我試圖減少調用數據庫和PHP文件(與Ajax)在哪裏查詢的數量,這就是爲什麼我試圖做到這一點。如果有的話。更好的辦法,我所有的耳朵
這是從工具創建的當前的嘗試,但它回來了空,但沒有錯誤:
SELECT
op_ideas.author_id,
op_ideas.date,
op_ideas.deptid,
op_ideas.idea_geo,
op_ideas.idea_id,
op_ideas.idea_text,
op_ideas.idea_title,
op_ideas.modifed_date,
op_ideas.post_type,
op_ideas.user_country,
op_ideas.user_county,
op_ideas.user_loc,
op_organs.organ_name,
op_organs.organ_logo,
op_organs.active,
COUNT(op_idea_vote.agree),
COUNT(op_idea_vote.disagree),
COUNT(op_idea_vote.obstain)
FROM
heroku_056eb661631f253.op_ideas op_ideas,
heroku_056eb661631f253.op_organs op_organs,
heroku_056eb661631f253.op_idea_vote op_idea_vote
WHERE
op_ideas.idea_id = op_idea_vote.idea_id AND
op_ideas.post_type = op_organs.organs_id
所以數據看起來像這樣:
+ ---------------------------------- -------------------------------------------------- -------------------------------------------- +
| idea_id | author_id | idea_title | idea_text |日期|同意|不同意|棄權| organ_name | organ_logo
+ ---------------------------------------------- -------------------------------------------------- -------------------------------- +
| 00001 | 10025225 | teste title |文字在這裏| 2012 | 00005 | 0000004 | 000002 | Comp Name | image/.png
+ ------------------------------------------- -------------------------------------------------- ----------------------------------- +
不是一個很好的例子。但我試過了。
這是最新的代碼。它帶回了3行,即使op_organs爲空。但它沒有顯示票數:
SELECT i.*, o.organ_name, o.organ_logo
FROM heroku_056eb661631f253.op_ideas i
LEFT JOIN op_organs o ON i.post_type = o.organs_id
JOIN
(SELECT
COUNT(v.agree = 1 or null) as agree,
COUNT(v.disagree = 1 or null) as disagree,
COUNT(v.obstain = 1 or null) as abstain
FROM op_idea_vote v, op_ideas i
GROUP BY v.idea_id
) as votes;
花了一整天的時間,讀了這麼多,我的頭在旋轉。有人有主意嗎 ?
感謝
目前尚不清楚你想要什麼輸出。也許一些示例數據和期望的輸出會有所幫助? – eggyal
我需要一個包含上述字段的行。但請注意,op_organs可能爲空,我需要根據op_ideas中的每條記錄來計算op_idea_vote中的字段。我將編輯頂部並嘗試並可視化它。 –
當你使用計數,選擇將總是1行。所以你應該嘗試將所有數據選擇到一行中,參見GROUP_CONCAT – Zaffy