我想要計算行數,或者在此情況下是同一類別中的產品數量,如果類別中沒有產品,則返回零。MySQL計算聯合表中的行
在我的查詢中的表看起來像這樣:
category category_lang media
------------ ------------- ---------
category_id | published category_id | name | alias media_id | category_id
----------------------- -------------------------- ----------------------
1 | 1 1 | One | one 1 | 1
2 | 1 2 | Two | two 2 | 2
3 | 1 3 | Three| three 3 | 3
media_lang product_category
------------------------------- ----------------
media_id | url | file_name product_id | category_id
------------------------------- ------------------------
1 | /images/ | file1.jpg 1 | 1
2 | /images/ | file2.jpg 2 | 1
3 | /images/ | file3.jpg 3 | 2
,我想這樣的結果:
category_id | category_name | alias | media_id | url | file_name | count
1 | One | one | 1 | /images/ | file1.jpg | 2
2 | Two | two | 2 | /images/ | file2.jpg | 1
3 | Three | three | 3 | /images/ | file3.jpg | 0
我的查詢目前看起來像這樣
SELECT
c.`category_id`,
ca.`name`,
ca.`alias`,
m.`media_id`,
ma.`url`,
ma.`file_name`,
COUNT(p.`product_id`) AS `count`
FROM `category` c
LEFT JOIN `category_lang` ca ON (c.`category_id` = ca.`category_id`)
LEFT JOIN `media` m ON (c.`category_id` = m.`category_id`)
LEFT JOIN `media_lang` ma ON (m.`media_id` = ma.`media_id`)
LEFT JOIN `product_category` p ON (c.`category_id` = p.`category_id`)
WHERE c.`published` = 1
ORDER BY ca.`name`
我邏輯顯然是錯誤的,因爲這個查詢將返回這個:
category_id | category_name | alias | media_id | url | file_name | count
1 | One | one | 1 | /images/ | file1.jpg | 3
我該如何達到預期的效果?
更改'COUNT(p.product_id)AS計數到COUNT(不同的p.product_id)AS計數'問題是您的計數被一個連接人爲地誇大了,每個連接有多個記錄。 – xQbert
對於我的生活,我不明白你是如何得到這些數字。從我所看到的情況來看,所有計數都應該是1,並且在結果集中只應該有三條記錄,甚至不會加上COUNT()。順便說一句,你應該用'COUNT'來使用'GROUP BY',但是你的預期輸出對我來說沒有意義。 –
@Tim Biegeleisen再看一眼。第一類有2個產品,第二類有1,第三類有零, –