gpt4 book ai didi

php - Mysql一次获取列值

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:19 25 4
gpt4 key购买 nike

我想用一个查询来获取没有“while”的列值...可能吗?我有两张这样的 table ......业主:

+----+-------+---------+
| id | names | surname |
+------------+---------+
| 1 | John | Red |
| 2 | Mark | Green |
| 3 | Frank | Yellow |
| ...| ... |... |
+------------+---------+

动物

+----+--------+--------+
| id |idOwner | animal |
+-------------+--------+
| 1 | 1 | Cat |
| 2 | 2 | Bird |
| 3 | 1 | Dog |
| ...| ... |... |
+-------------+--------+

现在我有了这段代码:

$query='SELECT * FROM Owners WHERE id=1';
$con=new mysqli($dbhostname, $dbusername, $dbpassword, $dbname);
$result=$con->query($query);
$arr=array();
while ($own = $result->fetch_array(MYSQLI_ASSOC)) {
$qry='SELECT animal FROM Animals WHERE idOwner=own["id"]';
$rslt=$con->query($qry);
$i=1;
while ($aml = $rslt->fetch_array(MYSQLI_ASSOC)) {
$txt='animal'.$i;
$own['animal'.$i]=$aml['animal'];
$i++;
}
$arr[]=$own;
}
$con->close();

我想得到相同的结果,但只需要一个查询,因为现在这个过程已经太迟了……可能吗?

最佳答案

是的,您所要做的就是使用 JOIN:

SELECT owners.*, animals.animal
FROM owners
LEFT JOIN animals
ON owners.id = animals.idOwner

现在您可以在一个循环中显示所有所有者和他们的动物,或者通过使用 WHERE 子句将查询限制为一个所有者。例如,添加此子句:

WHERE owners.id = 1

将从您在表格中显示的内容返回 2 行。


OP 在评论中提到他希望每个所有者一行。要为每个所有者获取一行,您必须使用子查询和 GROUP_CONCAT(完全未经测试):

SELECT owners.*, sub-animals.animal
FROM owners
LEFT JOIN (SELECT GROUP_CONCAT(animal) AS animal
FROM animals
GROUP BY animals.idOwner) AS sub-animals
ON owners.id = animals.idOwner

关于php - Mysql一次获取列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35017812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com