首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从两个不使用php mysql的表中选择

从两个不使用php mysql的表中选择
EN

Stack Overflow用户
提问于 2016-08-13 11:00:56
回答 1查看 206关注 0票数 0

我有两个不同的表,其结构如下:

石斑鱼

id : userId,pupID,groupId,groupId

小学生

id \ userId \ fname / lname

pupId在小学生中等于id。

我想从一个不同的组里找学生,然后用名字,名字来给他们下订单。

现在我有两个类似的问题:

代码语言:javascript
复制
$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...           
    }
}

这是可行的,但它不会像我想的那样按字母顺序排列。

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-13 11:33:33

这是对第一个查询的迭代:

代码语言:javascript
复制
while ($rows = mysqli_fetch_object($r)) {

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

代码语言:javascript
复制
while($row = mysqli_fetch_object($result)) {

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

代码语言:javascript
复制
1 A
1 B
2 A
2 B
3 A
3 B

第二个查询是按您给它的ORDER BY子句排序。但是,您将按照第一个查询对整个输出进行排序。

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

代码语言:javascript
复制
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对它们进行排序的方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38931996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档