[英]MySQL COUNT() not returning total number it is counting each rows separately
我的 MySQL 查詢有問題,我需要一些指導。 我正在創建一個搜索,我想知道我的查詢在我的搜索中找到了多少項目。 但問題是,我的查詢分別返回每行的計數,它沒有返回總計數。 這是我現在所擁有的。
我的查詢
SELECT
COUNT(t.id) AS total
FROM
trouble t
LEFT JOIN district d ON d.id = t.district
LEFT JOIN country c ON c.id = t.country
LEFT JOIN multi_category mc ON mc.t_id = t.id
LEFT JOIN category ct ON ct.id = mc.ct_id
LEFT JOIN state s ON s.id = t.state
WHERE
t.name LIKE '%keyword%' OR
t.title LIKE '%keyword%' OR
t.tags LIKE '%keyword%' OR
ct.category LIKE '%keyword%' OR
c.country LIKE '%keyword%' OR
s.state LIKE '%keyword%' OR
d.district LIKE '%keyword%'
GROUP BY
t.id
我的數據庫中有 14 行帶有我正在搜索的關鍵字,這個查詢返回 14 行,這是一個快照。
但它是單獨計算每一行 id 的。 我不想要那個。 我想要的是,我想要總行數為 14,並且我想要它在一行中。 你能幫我實現這個嗎?
提前致謝。
首先獲取 ID 的唯一數量,然后返回 ID 的總數。
SELECT count(*) AS Total
FROM
(
SELECT DISTINCT t.id
FROM trouble t
LEFT JOIN district d ON d.id = t.district
LEFT JOIN country c ON c.id = t.country
LEFT JOIN multi_category mc ON mc.t_id = t.id
LEFT JOIN category ct ON ct.id = mc.ct_id
LEFT JOIN state s ON s.id = t.state
WHERE
t.name LIKE '%keyword%' OR
t.title LIKE '%keyword%' OR
t.tags LIKE '%keyword%' OR
ct.category LIKE '%keyword%' OR
c.country LIKE '%keyword%' OR
s.state LIKE '%keyword%' OR
d.district LIKE '%keyword%'
GROUP BY t.id
) resultTable
使用exists
而不是LEFT JOIN
s。 當有多個匹配項時,連接只會增加行:
SELECT COUNT(*)
FROM trouble t
WHERE t.name LIKE '%keyword%' OR
t.title LIKE '%keyword%' OR
t.tags LIKE '%keyword%' OR
EXISTS (SELECT 1
FROM district d
WHERE d.id = t.district AND d.district LIKE '%keyword%'
) OR
EXISTS (SELECT 1
FROM country c
WHERE c.id = t.country AND c.country LIKE '%keyword%'
) OR
EXISTS (SELECT 1
FROM state s
WHERE s.id = t.state AND s.state LIKE '%keyword%'
) OR
EXISTS (SELECT 1
FROM multi_category mc JOIN
category ct
ON ct.id = mc.ct_id
WHERE mc.t_id = t.id AND
(ct.category LIKE '%keyword%' OR
c.country LIKE '%keyword%'
)
);
通過消除多行的創建,這也應該更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.