【问题标题】:Better way of getting values from table without looping 300 queries在不循环 300 个查询的情况下从表中获取值的更好方法
【发布时间】:2012-01-29 02:36:22
【问题描述】:

我编写了一个查询和一个循环,其中列出了以 HTML 表格式格式化的 mysql 表(“记录”)中的所有行。

其中一个字段是“subject_id”,它是一个整数。我还有一个名为“subjects”的表,它对应于记录表中的相同“subject_id”。 “主题”表中只有两个字段,一个是自动索引 ID 整数,另一个是主题标题的 varchar(1024)。

从“记录”表返回的值是一个整数。我想对每一行的“记录”表中的整数进行查找,以输出“subject_id”字段中的等效文本。

我的第一个想法,幼儿园的方式,是在循环中加入另一个查询,有效地将我的查询数量从 300 增加到 600 以加载页面(不需要分页)。

除了增加 300 个查询之外,这个“子查询”还有什么更好的方法?

编辑: 我正在使用 while 循环从表中提取数据并回显我的变量 $r_subject(来自:$r_subject = mysql_result($result,$a,"subject");)。从初始记录表返回的值是 INT。我想获取 $r_subject 然后对照 SUBJECTS 表检查它以获取与该 INT id 关联的字符串名称。

【问题讨论】:

  • 300这个数字从何而来?您正在使用subject_id 匹配表RECORDSSUBJECTS 之间的行,但是您如何从RECORDS 中选择行?
  • RECORDS 表中目前大约有 300 条记录。我通过 SELECT * FROM records 提取它,因为我正在使用来自所有字段的数据来填充 HTML 表。

标签: php mysql


【解决方案1】:

如果不看代码,很难确切知道您需要什么,但据我收集的信息,您有 2 个表,一个有 ID,另一个有文本,所以您希望使用 join

第二件事是,您首先要看看您是否真的需要 300 个查询。有很多查询要运行,当您运行批量插入/更新或类似性质的东西时,您应该只需要运行这么多查询;除此之外,您很可能会大幅减少该数字。

【讨论】:

  • 最终 JOIN 是我学习和处理曲线所需要的。谢谢弗朗西斯。
【解决方案2】:
select 
    A.*, 
    B.title 
from 
    records A, 
    subjects B 
where 
    B.subject_id = A.subject_id

这是一个单一的查询,将生成您页面所需的所有数据。

【讨论】:

    【解决方案3】:
    select
          subjects.SubjectTitle,
          records.whateverFieldYouWant,
          records.AnyOtherField
       from
          records
             join subjects
                on records.subject_id = subjects.subject_id
       where
          records.subject_id = TheOneSubjectYouWant
    

    但如果没有表格的实际结构和显示的一些示例数据显示您所期望的正确上下文,则无法确认

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多