我正在修改一个从数据库中提取新闻项的查询。这些新闻项目具有标记,这些标记在数据库中作为以逗号分隔的字符串存储在单个列中。
例如:
'content,video,featured video,foo'
我要做的是抓住表格中的所有项目,但不标签字符串中包含'video'
的项目,除非标记字符串还包含'featured video'
这样做的最佳方式是什么?
这是我的问题:
SELECT *
FROM posts
WHERE status = 2
ORDER BY postDate
答案 0 :(得分:1)
可能不是最好的方法......
Select *
FROM posts
where status = 2
AND postID NOT IN
(SELECT postID FROM posts
WHERE tag LIKE '%Video%'
AND tag NOT like '%Featured Video%')
我假设PostId是post表中的PK btw ...
答案 1 :(得分:1)
我提供了可怕的东西,但是如果你想坚持你的桌面结构,你可以试着跟随:
SELECT * FROM posts
WHERE STATUS=2 AND
INSTR(tags,'featured video')>0
OR
INSTR(tags,'video')=0
至少在该字段上使用FULLTEXT
索引,因此使用它不会那么痛苦。
答案 2 :(得分:1)
我会使用这样的查询:
SELECT
*
FROM
posts
WHERE
status = 2
AND (CONCAT(',', tags, ',') LIKE '%,featured video,%'
OR CONCAT(',', tags, ',') NOT LIKE '%,video,%')
ORDER BY
postDate