1

我有 3 个表:报价、主题标签和用户。

如下:

表报价

Quote                 | user    |  Hashtags
hello world #greet    |  1      |  ,1,3
this is a #quote#this |  2      |  ,2,4

表标签

id   | hashtag
1    | greet
2    | quote
3    | hello
4    | this

表用户

id | username
1  | john
2  | michael

我想要做的是编写一个 SQL 查询,使用 INNER JOIN,使用给定的主题标签获取引号(每个引号的用户名)。

例如:我有标签:“#greet”,我想得到这个标签下的引号。我必须做这样的事情:

SELECT
     quo.quote,
     usr.username,
     hash.hashtag
FROM
     quote as quo
INNER JOIN
     user as usr
INNER JOIN
     hashtag as hash
ON
     usr.id=quo.user
AND
     hash.id LIKE '%,quo.hashtags,%'
AND 
     hash.id = :givenHashtag

正如您在 SQL 示例中看到的,我想检查主题标签 id 是否包含在引号主题标签 varchar 中。使用LIKE '%,x,%'

问题是,在这里,我不知道如何使用%..%quo.hashtag 列的名称。

请注意,我正在基于 MySQL/PHP 工作

4

1 回答 1

4

永远,永远,永远不要在一列中存储多个值。

就像你现在看到的那样,这只会让你头疼。规范化您的数据库。创建一个与主题标签和引号相关的新表。

quote_tags
-----------
quote_id
hashtag_id

然后您可以从报价表中删除主题标签列

于 2013-11-09T12:41:34.547 回答