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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP MYSQL查询,使用来自多个表的数据搜索多个字段/列脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
很长一段时间潜伏在这里,多年来一直在使用这个网站的建议,现在我有一个问题,我找不到答案 – 我确信解决方案很简单

我正在为音乐曲目建立一个标记系统.我有三张桌子

曲目

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

Taglinks

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

标签

-------------------------
| id | tag      | tyPE  |
-------------------------
| 1  | acoustic | genre | 
| 2  | anger    | 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虽然只返回那些同时具有这些标签和类型的曲目?

提前致谢

编辑:

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

这是因为后来我可能会有一个名为jazz的类型为genre的标签,以及一个名为jazz的带有类型样式的标签,我需要能够确保选择正确的标签类型以及标签本身.

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

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

解决方法

问题是轨道应该有2个标签等于要求的值,所有发布的请求在那种情况下都不起作用.必须使用INTERSECT sql命令,但这个命令在MysqL中不可用.

这样的东西应该工作:

SELECT tracks.id,tracks.name
From  `taglinks` 
LEFT JOIN tags ON tags.id = taglinks.tag_id
LEFT JOIN tracks ON tracks.id = taglinks.track_id
WHERE (
tag =  'accoustic'
AND `type` =  'genre'
)
OR (
tag =  'anger'
AND `type`=  'mood'
)
group by track_id
HAVING COUNT( * ) =2

>我选择与至少一个标签匹配的所有行>我计算与GROUP BY匹配的Tage数量.>如果我搜索两个参数(这里accoustic =’genre’和anger =‘情绪’,发现此曲目有2行,然后匹配2条件,我把它保持到最终结果>只需记住用数字改变HAVING COUNT(*)= 2我们想要搜索标签

脚本宝典总结

以上是脚本宝典为你收集整理的PHP MYSQL查询,使用来自多个表的数据搜索多个字段/列全部内容,希望文章能够帮你解决PHP MYSQL查询,使用来自多个表的数据搜索多个字段/列所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。