gpt4 book ai didi

php - 从 2 个不适用于 php mysql 的表中选择

转载 作者:行者123 更新时间:2023-11-29 11:21:02 28 4
gpt4 key购买 nike

我有两个具有以下结构的不同表:

群组

id |用户 ID |小狗ID |组ID

学生

id |用户 ID |名称 |名称

groulrel 中的 pupId 等于瞳孔中的 id。

我想从不同的组中获取学生,然后按 fname、lname 对他们进行排序。

现在我有两个这样的查询:

$q = "SELECT * FROM grouprel WHERE userid = ". $userid ." AND groupId = ". $_GET['id'] ."";
$r = mysqli_query($mysqli, $q);

while ($rows = mysqli_fetch_object($r)) {
$query = "SELECT id, fname, lname FROM pupils WHERE userid = ". $userid ." AND id = ". $rows->pupId ." AND status = 0 ORDER BY fname, lname";
$result = mysqli_query($mysqli, $query);

while($row = mysqli_fetch_object($result)) {
echo stuff...
}
}

这可行,但它并没有像我想要的那样按字母顺序排列名称。

我该如何解决这个问题?

最佳答案

这是迭代第一个查询:

while ($rows = mysqli_fetch_object($r)) {

这会迭代第二个查询的每个实例:

while($row = mysqli_fetch_object($result)) {

因此,如果第一个查询返回 1,2,3,并且第二个查询的每次迭代返回 A,B,那么您的输出将为:

1 A
1 B
2 A
2 B
3 A
3 B

第二个查询按照您提供的 ORDER BY 子句进行排序。但是通过第一个查询对整个输出进行排序。

最终,为什么您需要这些单独的查询?在循环中执行数据库查询几乎总是错误的想法。看起来您所需要的只是一个带有简单JOIN的查询。猜测你的逻辑,是这样的:

SELECT
pupils.id, pupils.fname, pupils.lname
FROM
pupils
INNER JOIN grouprel ON pupils.id = grouprel.pupId
WHERE
pupils.userid = ?
AND grouprel.groupId = ?
AND pupils.status = 0
ORDER BY
fname, lname

可能需要进行一些调整才能完全匹配您正在寻找的内容,但您可以通过单个查询而不是多个单独的查询来实现您的目标。然后,该查询的结果将按照您告诉 MySQL 的排序方式进行排序,而不是您告诉 PHP 的排序方式。

关于php - 从 2 个不适用于 php mysql 的表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38931996/

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