1

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

例如:

'content,video,featured video,foo'

我想要做的是获取表中的所有项目,但'video'获取标签字符串中包含的项目,除非标签字符串还包含'featured video'

做这个的最好方式是什么?

这是我的查询:

SELECT * 
FROM posts 
WHERE status = 2 
ORDER BY postDate
4

3 回答 3

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 是帖子表中的 PK 顺便说一句...

于 2013-06-02T20:21:03.133 回答
1

我会使用这样的查询:

SELECT
  * 
FROM
  posts 
WHERE
  status = 2
  AND (CONCAT(',', tags, ',') LIKE '%,featured video,%'
       OR CONCAT(',', tags, ',') NOT LIKE '%,video,%')
ORDER BY
  postDate
于 2013-06-02T20:39:57.107 回答
1

我提供了可怕的东西,但如果你想坚持你的表格结构,你可以尝试以下:

 SELECT * FROM posts
    WHERE STATUS=2 AND
    INSTR(tags,'featured video')>0 
    OR
    INSTR(tags,'video')=0

至少FULLTEXT在该字段上使用索引,所以使用起来不会那么痛苦。

于 2013-06-02T20:28:38.803 回答