gpt4 book ai didi

PHP MYSQL 查询,使用多个表的数据搜索多个字段/列

转载 作者:可可西里 更新时间:2023-11-01 07:33:11 24 4
gpt4 key购买 nike

长期潜伏在这里,多年来一直使用该网站的建议,现在我有一个问题找不到答案 - 我相信解决方案很简单!

我正在为音乐轨道设置一个标签系统。我有三张 table

轨道

---------------
| id | name |
---------------
| 1 | Track1 |
| 2 | Track2 |
---------------

标签链接

--------------------------
| id | tag_id | track_id |
--------------------------
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 2 | 2 |
--------------------------

标签

-------------------------
| id | tag | type |
-------------------------
| 1 | acoustic | genre |
| 2 | anger | mood |
-------------------------

我希望能够获取轨道的轨道名称,例如,tag:acoustic, type:genre AND tag:anger, type:mood。所以在这种情况下,我想要轨道 1,因为它有两个标签。

我当前的查询是

SELECT tracks.name 
FROM tracks
JOIN taglinks ON tracks.id=taglinks.track_id
JOIN tags ON (tags.type='genre' AND tags.tag='acoustic') AND (tags.type='mood' AND tags.tag='anger')
WHERE taglinks.tag_id=tags.id;

这不会返回任何内容,如果我删除第二个 JOIN 中的 AND 部分,那么我会按预期将所有轨道标记为原声,如果我将其更改为 OR,我会再次按预期获得两个轨道。

我如何执行 AND 并仅返回那些同时具有这些标签和类型的轨道?

提前致谢:D

编辑:

只是为了澄清我所追求的。我希望能够检索同时具有 Acoustic 和 Anger 作为标签的轨道,但前提是这些标签也与给定类型匹配。

这是因为稍后我可能会有一个类型为 genre 的名为 jazz 的标签,以及一个类型为 style 的名为 jazz 的标签,我需要能够确保通过正确的标签类型以及标签本身进行选择.

这是我正在使用的 sqlfiddle 的链接 - http://sqlfiddle.com/#!2/aad82/3 .

到目前为止,Gilles 的回答似乎是一个很好的解决方案!

最佳答案

这应该没问题

select
t.name
from
tracks as t
inner join taglinks as tl on t.id = tl.track_id
inner join tags as tg on tl.tag_id = tg.id
where
tg.tag = 'acoustic' and
tg.type = 'genre' and
tg.tag = 'anger' and
tg.type = 'mood';

注意:我使用作为标识符,因为我更喜欢这种方式,因为它可以节省在任何地方写表名的时间。您不必这样做。

编辑

我可能有点误解了你的问题,所以这个问题也可能有帮助:

select
t.name
from
tracks as t
inner join taglinks as tl on t.id = tl.track_id
inner join tags as tg on tl.tag_id = tg.id
where
(tg.tag = 'acoustic' and
tg.type = 'genre') or
(tg.tag = 'anger' and
tg.type = 'mood');

这将返回具有正确类型和标签但不必全部具有的结果。

关于PHP MYSQL 查询,使用多个表的数据搜索多个字段/列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13862911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com