4c4fedf7 OMoy3Hoa
4c4fedf7 yiWDGB4D
broe4AMb A9rLRawV
broe4AMb mi9rLmZW
nhrtK9ce yEsBoYLj
rEEtK9gt A9rLRawV
rEEtK9gt mi9rLmZW
rEEtK9Hh A9rLRawV
rEEtK9Hh msBWz8CQ
如果我输入
A9rLRawV
,mi9rLmZW
。我想要类似的输出;broe4AMb
rEEtK9gt
输出是
A9rLRawV
,mi9rLmZW
组合的结果。在这里,broe4AMb
和rEEtK9gt
都在表中具有A9rLRawV
和mi9rLmZW
关联。我进行了查询,但是得到了类似的输出;broe4AMb
rEEtK9gt
rEEtK9Hh
我的查询就像;
SELECT DISTINCT prodid
FROM tablea
WHERE tagid IN ('A9rLRawV','mi9rLmZW');
输出是这样的,因为我认为
reetK9Hh
在tablea中具有与其关联的A9rLRawV
。但是我不希望该条目出现,因为它没有与mi9rLmZW
关联的条目。这是SQL小提琴http://sqlfiddle.com/#!9/12223/2/0
是否需要自连接。什么是最“有效”的方法?是否可以单独使用MySQL或通过PHP的支持来实现?我该怎么做/解决这个问题?
最佳答案
我坚信,仅通过SQL即可解决此问题。从数据库中获取所需的数据。让PHP进行演示。为什么?通常,数据库可以比通过Web服务器/中间件服务器上的代码更快地解析数据。
至于如何...阅读having
子句和group by
:
我在这里所做的是按prodID分组,以确保返回所有prodID。 MySQL扩展了group by子句,虽然它可能允许hading子句在没有group by的情况下存在,但是如果没有按prodid进行分组,您将无法获得所需的结果。具有在哪里获得的两个标签的不同计数。注意:我在标签ID的计数上添加了distinct
,因为我不确定您的总体数据是否每个产品都有重复的标签ID。如果我们知道价值观是不同的,我们可以消除它。
如果需要,可以根据提供的TagID数量动态设置#。
SELECT prodid
FROM tablea
WHERE tagID in ('A9rLRawV','mi9rLmZW')
GROUP BY prodid
HAVING count(distinct tagID)=2
SQL FIddle
我更喜欢这种方法,因为它可能比您需要的自我连接更好地扩展。传入两个参数:一个用于标签,一个用于标签数量。 (我这样做是希望您的PHP使用参数化查询)对于自连接,您必须编写动态SQL来处理每个附加标记,因此,如果您还有3,4,5个连接。这样,您只需传入5个值和5。并获取所有匹配项的列表。
关于php - 如何通过选择特定列中相关数据的组合来从表中选择行?的MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34187534/