我正在做两个请求,以获得一个值。在我看来,一个会更快。我认为最好的方法是使用join。这是我的代码:
$uid = db_query("SELECT uid FROM TABLE1 WHERE mail = '{$account->mail}' LIMIT 1");
$row = mysql_fetch_array($uid);
$uid = $row[0];
$brief = db_query("SELECT value FROM Table2 WHERE uid = '{$uid}' AND fid = '16' LIMIT 1");
$row = mysql_fetch_array($brief);
$brief = $row[0];`
如何将这两个请求合并为一个?
非常感谢提前!
答案 0 :(得分:2)
SELECT value, ui
FROM TABLE1 T1
INNER JOIN Table2 T2
USING (uid)
WHERE mail = '{$account->mail}'
AND fid = 16
LIMIT 1
但你的疑问很奇怪。 uid
是唯一的吗? fid
是唯一的吗?否则,它将选择“随机”行。
基本上,我的查询使用uid列将TABLE1与Table2连接起来,并且只接受mail = $ account-> mail和fid = 16的行。因此,如果有多行,则无法确定哪一个将被选中。
答案 1 :(得分:0)
查询将是:
SELECT TABLE1.uid,TABLE2.value
FROM TABLE1,TABLE2
WHERE TABLE1.mail = '{$account->mail}'
AND TABLE2.uid = TABLE1.uid
AND TABLE2.fid = '16'
LIMIT 1
从行中抓取数据:
$uid = $row[0];
$brief = $row[1];
答案 2 :(得分:0)
其他人提供了语法,所以我不再重复。但是关于使用什么类型的连接:
为了获得上述内容,您可以使用带有TABLE1的left join
作为连接中的第一个表。
在您的示例中,您始终获得uid
,并且您可能会获得value
。左连接会给你相同的结果,因为你总是从TABLE1返回结果(uid
)和从TABLE2匹配的行(value
)。当然,假设mail
的值匹配。
注意:据我所知,如果您对邮件列没有唯一约束,使用LIMIT 1
可能会掩盖问题。如果TABLE1中有两行具有相同的邮件值,您将永远不会知道此查询。在某些情况下,这可能是您系统中的错误。