我有以下两个不同结构的表:
grouprel
id | userId | pupID | groupId
学生id | userId | fname | lname
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的顺序排序。