Php 只有在存在其他条件时,MySQL 2具有公共列的表才会匹配
不知道该如何准确解释,但现在开始 我有这些桌子: 信息:Php 只有在存在其他条件时,MySQL 2具有公共列的表才会匹配,php,mysql,Php,Mysql,不知道该如何准确解释,但现在开始 我有这些桌子: 信息: ------------------------ |msgid|clientid|message| ------------------------ |1 |536 |Hello | ------------------------ |2 |543 |Hello | ------------------------ |3 |529 |Hello | ---------------------
------------------------
|msgid|clientid|message|
------------------------
|1 |536 |Hello |
------------------------
|2 |543 |Hello |
------------------------
|3 |529 |Hello |
------------------------
客户:
----------------------
|cleintid|wholesaleid|
----------------------
|536 |479 |
----------------------
|543 |480 |
----------------------
|529 |479 |
----------------------
如果消息记录中的客户机id归客户机所有,我只想从消息表中提取记录。批发商id=479
这样就可以从messages表中提取记录1和3
我知道如何处理完全独立的多个嵌套查询,但我知道在一个查询中使用纯SQL有一种更聪明的方法。我已经花了很长时间来学习这一点,所以我在这里想明白这一点
通常,在这种情况下,我会做一个简单的查询,然后在clients表中循环查找与批发id匹配的所有客户id。我会将它们全部填充到一个数组中,或者在循环时,对该客户id的所有消息执行单独的查询。这很糟糕,我知道有更好的方法。成吨的循环,在循环中,如果我的数据集变大,速度会很慢
我知道这是不正确的,但我希望它能帮助说明我正在努力做什么
类似于此,但没有多个循环:
从批发商ID=479的客户机中选择*
For Each Loop Here
SELECT * FROM messages WHERE clientid=ThisClientID
For Each Loop #2 HERE
Print msgid, clientid, message
End For Each Loop #2
End For Each Loop
抱歉,这太让人困惑了,只是不知道如何更好地解释我现在是怎么做的,以及我想去哪里
我猜每个人都会告诉我去学习连接,但是,我在这方面花了很多时间,我不确定它是否适用于我试图实现的目标。使用
内部连接(表客户机中的cleintid
可能是您的问题中的一个输入错误):
您可以将这两个表连接起来
SELECT m.*
FROM messages m
INNER JOIN clients c
ON m.clientid = c.clientid
AND c.wholesaleid = 479;
您只需要一个简单的连接
SELECT m.*
FROM messages m
INNER JOIN clients c
ON m.clientid = c.clientid
AND c.wholesaleid = 479;