mysql搜索查询返回相同的记录x次
我有以下mysql查询mysql搜索查询返回相同的记录x次,mysql,Mysql,我有以下mysql查询 SELECT *, DATE(file_created) as created, s.disk_id, s.url, (SELECT COUNT(*) FROM Comments WHERE cmt_type=1 AND file_id=cmt_id) as comments FROM (files, servers s) WHERE usr_id=1 AND (file_name LIKE CONCAT('%','sample','%') OR file_descr
SELECT *, DATE(file_created) as created, s.disk_id, s.url,
(SELECT COUNT(*) FROM Comments WHERE cmt_type=1 AND file_id=cmt_id) as comments FROM (files, servers s)
WHERE usr_id=1 AND (file_name LIKE CONCAT('%','sample','%') OR file_descr LIKE CONCAT('%','sample','%'))
ORDER BY file_created DESC
当我运行此查询时,如果至少有一条记录与查询匹配,那么我将返回40条记录,并且所有40个结果将是具有相同ID的相同记录
我看不到查询有任何明显的问题,所以不确定是什么导致了这个问题。您正在连接两个表(
文件和服务器),但我看不到任何限制服务器的内容,因此它将用服务器的每一匹配行重复文件的每一匹配行(我想是所有的)。这是您的查询,经过格式化后,可以更好地理解:
SELECT *, DATE(file_created) as created, s.disk_id, s.url,
(SELECT COUNT(*) FROM Comments WHERE cmt_type=1 AND file_id=cmt_id) as comments
FROM files, servers s
WHERE usr_id = 1 AND
(file_name LIKE CONCAT('%','sample','%') OR file_descr LIKE CONCAT('%','sample','%'))
ORDER BY file_created DESC
在文件
和服务器
之间没有join
条件。毫无疑问,您会得到重复项。from
子句中的逗号表示交叉连接
或“创建笛卡尔积”。在from
子句中不要使用逗号。这是一个简单的规则,可以避免将来的挫折
因此,如果文件
具有服务器id,则您可能需要:
SELECT *, DATE(file_created) as created, s.disk_id, s.url,
(SELECT COUNT(*) FROM Comments WHERE cmt_type=1 AND file_id=cmt_id) as comments
FROM files JOIN
servers s
ON files.serverid = s.serverid
WHERE usr_id = 1 AND
(file_name LIKE CONCAT('%','sample','%') OR file_descr LIKE CONCAT('%','sample','%'))
ORDER BY file_created DESC
我想,,
首先,应该在where语句中为诸如files.server\u id=servers.id
之类的表添加连接条件。
其次,您应该将file\u id=cmt\u id
语句更改为comments.file\u id=file\u id
,以获得正确的计数。
我希望它能工作。你能向OP展示完整查询的样子吗?你能给我发送文件和服务器的列名吗?
SELECT *, DATE(file_created) as created, s.disk_id, s.url, (SELECT COUNT(*) FROM Comments WHERE cmt_type=1 AND Comments.file_id = files.file_id) as comments
FROM (files, servers s)
WHERE files.file_server_id = s.server_id AND usr_id=1 AND (file_name LIKE CONCAT('%','sample','%') OR file_descr LIKE CONCAT('%','sample','%'))
ORDER BY file_created DESC