[英]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.