我正在对数据库进行相当大的查询,由于某种原因,它返回了许多与我的任何搜索词都不匹配的结果。它似乎也复制了我的结果,所以我得到了相同的 SQL 项 16 次。有什么想法吗?
SELECT a.*
FROM
j20e8_datsogallery AS a,
j20e8_datsogallery_tags AS t
WHERE
(a.id LIKE "%bear%" OR
a.imgtitle LIKE "%bear%" OR
a.imgtext LIKE "%bear%" OR
a.imgauthor LIKE "%bear%" OR
t.tag LIKE "%bear%")
ORDER BY a.id DESC
LIMIT 0, 16
我认为这可能与 LIKE %term% 部分有关,但根本无法使其工作。
最佳答案
我会确保您符合加入条件。否则你最终会得到一个完整的连接,或者更糟的是,一个来自交叉连接的笛卡尔积。沿着这些线的东西:
SELECT a.*
FROM
j20e8_datsogallery AS a
JOIN j20e8_datsogallery_tags AS t ON a.ID = t.GalleryID
WHERE
...
ORDER BY a.id DESC
LIMIT 0, 16
此外,考虑使用 FULLTEXT INDEX
...它可以将所有这些列合并到一个索引中,并使搜索所有这些列非常有用。
MySql 中的 FULLTEXT INDEX
可用于将几个不同的列“组合”成一大堆文本,然后您可以使用 MATCH()
列 反对
搜索词。
要创建一个FULLTEXT INDEX
,您可以简单地使用CREATE INDEX
语法记录here .
CREATE FULLTEXT INDEX FDX_datsogallery
ON j20e3_datsogallery ( id, imgtitle, imgtext, imgauthor )
然后您可以在包含 MATCH() ... AGAINST
语句的查询中使用它,记录在案 here :
SELECT a.*
FROM j20e8_datsogallery AS a
WHERE MATCH( id, imgtitle, imgtext, imgauthor ) AGAINST( 'bear' )
关于mysql - SQL 特定语句查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18492876/