SQL查询 - 除非这样,否则不要抓住它

时间:2013-06-02 20:16:45

标签: sql

我正在修改一个从数据库中提取新闻项的查询。这些新闻项目具有标记,这些标记在数据库中作为以逗号分隔的字符串存储在单个列中。

例如:

'content,video,featured video,foo'

我要做的是抓住表格中的所有项目,但标签字符串中包含'video'的项目,除非标记字符串还包含'featured video'

这样做的最佳方式是什么?

这是我的问题:

SELECT * 
FROM posts 
WHERE status = 2 
ORDER BY postDate

3 个答案:

答案 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