我有两个表(这里有随机数据)
cu cgm
+-----+---------+-----+ +---------+--------+
| uid | name | ... | | groupid | userid |
+-----+---------+-----+ +---------+--------+
| 1 | manfred | ... | | 2 | 2 |
| 2 | peter | ... | | 2 | 5 |
| 3 | jackson | ... | | 2 | 7 |
| ... | ... | ... | | 4 | 3 |
+-----+---------+-----+ +---------+--------+
uid <========= FOREIGN KEY ========== userid
我希望按cu.name
选择cu.uid
和cgm.userid
/ cgm.groupid
,然后将值放入关联数组中,其中键为cu.name
,值为cu.uid
cgm.userid
/ cgm.userid
。我唯一的解决方案是发送查询以cgm.groupid
选择cu.name
,发送第二个查询以cu.uid
选择{{1}}并将数据放在一起。但我想知道,如果只有一个查询可以实现这一点,并尽可能少地使用PHP。
答案 0 :(得分:2)
带左键的SQL可能是:
SELECT cu.name, cu.uid, cgm.userid, cgm.userid, cgm.groupid
FROM cu
LEFT JOIN cgm ON cu.uid = cgm.userid
WHERE cgm.groupid = 2 -- your var there
虽然在这种情况下您不需要选择cgm.userid
,因为它应该与cu.uid
相同(如果不是,则此连接不正确)。
使用PHP:
$group_id = 2;
$sql = "SELECT ..... WHERE cgm.groupid = " . $group_id;
$query = $db->query($sql); // your query functions here...
To help you avoid SQL injection, your should bind $group_id
作为参数:
$sth = $db->prepare("SELECT ... WHERE cgm.groupid = :group_id");
$sth->bindParam(':group_id', $group_id, PDO::PARAM_INT); // only accept integers
$sth->execute();
更多信息:
答案 1 :(得分:1)
SELECT cu.name, cu.uid FROM cu LEFT JOIN cgm ON cu.uid = cgm.userid WHERE cgm.groupid = 2
您可以根据需要调整WHERE
条件。
答案 2 :(得分:0)
是的,你可以通过使用join来实现。使用以下查询。
select uid,name from cu,cgm where uid=userid and groupid =<GROUP_ID>;
您可以使用PDO连接数据库。
$conn= new PDO('mysql:host=localhost;dbname=chatting4u','root','');
$stmt=$conn->prepare('select uid,name from cu,cgm where uid=userid and groupid =<GROUP_ID>');
$stmt->execute();
$row=$stmt->fetchall(PDO::FETCH_ASSOC);
现在你将获得uid,在$ row数组中取消命名。尝试一下,我希望它会起作用。
参考文献: -
Databse Joins-&gt; http://www.w3schools.com/sql/sql_join.asp
PHP中的PDO-&gt; http://www.php.net/manual/en/book.pdo.php