php - 我应该在客户端代码中使用多个 SQL 查询还是多个循环?

标签 php mysql sql loops

我正在构建一个小型内部电话号码扩展列表。

在数据库中我有两个表,一个是people 表,一个是numbers 表。该关系分别是一对多

我想在单个 HTML 表格中显示结果,每行一个人,但如果他们有多个数字,它会在单个列中显示这些结果,并在人员行上使用 rowspan 进行补偿。

现在,要从数据库中获取要使用的结果,我可以:

(pseudocode)

SELECT id, name
FROM people

foreach result as row {
  SELECT number
  FROM numbers
  WHERE numbers.person_id = row['id']
}

这意味着我正在执行一个查询来获取所有用户,但是如果我有 100 个用户,我将执行 100 个额外的查询来获取每个用户的号码。

相反,我可以这样做:

(pseudocode)

SELECT number, person_id
FROM numbers

SELECT id, name
FROM people

foreach people as person {
  echo name
  foreach numbers as number {
    if (number.id = person.id) {
      echo number
    }
  }
}

因此,本质上它做的是完全相同的事情,只是我执行了两个查询以将所有结果放入数组,然后遍历数组以格式化我的表。

我应该使用哪种方法或有更好的方法吗?

最佳答案

常用的方法是进行常规的 JOIN:

SELECT id, name, number
FROM people, numbers
WHERE people.id = numbers.person_id;

您可以添加一个 ORDER BY 来按顺序获取数字,或者您可以通过单次传递结果集创建一个数组,然后循环遍历该数组。

您还可以考虑 GROUP_CONCAT连接同一个人的所有号码:

SELECT id, name, GROUP_CONCAT(number SEPARATOR ', ')
FROM people, numbers
WHERE people.id = numbers.person_id
GROUP BY people.id;

既然你甚至问这个问题:我不能强调你应该拿起一本关于数据库设计的介绍性书籍。它帮助我奇迹般地学习了关系数据库背后的理论。

关于php - 我应该在客户端代码中使用多个 SQL 查询还是多个循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12962746/

相关文章:

php - 为什么 echo 在 php 繁忙时不显示任何内容

javascript - 使用 jquery 在 php cURL 中搜索

GET 方法链接的 PHP 替换

mysql - 我可以在 TRIGGER 中创建 MYSQL TRIGGER WITH 或条件吗

sql - mysql查询错误,不等于

php - PHP 中的依赖注入(inject)

php - Medoo - 选择问题

MySQL ORDER BY 随机字段不适用于附加操作

sql - 在 Oracle SQL 中输出到屏幕

MYSQL Join查询三张表