MySQL:如果ID与表B中的2(或任意n)行匹配,则从表A中选择
该场景非常简单:我在表 A 中有内容,在表 B 中有内容标签:
Table A:
+----+-------+-...
| id | title | ...
+----+-------+-...
Table B:
+------+-----+
| id_A | tag |
+------+-----+
我想选择 A 中具有标签“foo”的所有内容行:
SELECT A.* FROM A, B WHERE A.id = B.id_A AND B.tag = 'foo'
到目前为止,这很简单。
我的问题是:如何选择具有两者标签“foo”和标签“bar”的内容行?特别是,如何选择具有 n
标签 'foo'、'bar'、... 的行,用于 任意 n > 1
?
一个解决方案是加入 B n
次,但这感觉很糟糕,而且我认为它的性能并不好。
由于我使用 MySQL、PHP 和 PDO 以及准备好的语句,如果有一个解决方案在 PHP 部分中不需要必要的字符串连接(如“加入 n 次”解决方案),那将是我的最喜欢的。
The scenario is quite straight forward: I have content in table A and tags for contents in table B:
Table A:
+----+-------+-...
| id | title | ...
+----+-------+-...
Table B:
+------+-----+
| id_A | tag |
+------+-----+
I want to select all content rows in A, that have tag 'foo':
SELECT A.* FROM A, B WHERE A.id = B.id_A AND B.tag = 'foo'
So far, that's simple.
My problem is: How can I select content rows, that have both tag 'foo' and tag 'bar'? Especially, how can I select rows that have n
tags 'foo', 'bar', ... for arbitrary n > 1
?
A solution would be to join B n
times, but that feels bad, and I assume, that it's not really performant.
Since I use MySQL, PHP and PDO with prepared statements, if there is a solution that goes without necessary string concatenation (like in the 'Join n
times' solution) in the PHP part, that would be my favourite.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)