我有两个不同的表,其结构如下:
石斑鱼
id : userId,pupID,groupId,groupId
小学生
id \ userId \ fname / lname
pupId在小学生中等于id。
我想从一个不同的组里找学生,然后用名字,名字来给他们下订单。
现在我有两个类似的问题:
$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...
}
}这是可行的,但它不会像我想的那样按字母顺序排列。
我怎么才能解决这个问题?
发布于 2016-08-13 11:33:33
这是对第一个查询的迭代:
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对它们进行排序的方式。
https://stackoverflow.com/questions/38931996
复制相似问题