如何使用2个MySQL查询动态选择有限数量的项目?

mig*_*aj3 0 php mysql pdo

在我的Web应用程序的主页上,我将显示有限数量的项目.我有来自2个不同表的2个查询以显示这些特定项:

  • 'table1'包含我的应用程序的所有项目的列表
  • 'table2'包含一个列,用作"table1"中具有相同id的某些项的引用ID

这允许我选择要在主页上显示的项目.

我有2个查询:

  • $t1_items = DB::fetch("SELECT * FROM 'table1'");
  • $t2_items = DB::fetch("SELECT * FROM 'table2'");

我有2个foreach循环遍历每个表,并将'table2'中的id与'table1'中的每个项目进行比较.如果两个表中的ID匹配,则会在主页上显示该项目.

这允许我通过更改"table2"中每个项目的引用ID来选择我想要在主页上显示的项目.

这是我的foreach循环代码:

<?php   
    foreach ($t1_items as $i => $t1_item) {
        foreach ($t2_items as $i => $t2_item) {
            if ($t1_item->id == $t2_item->ref_id) {
                echo $t1_item->title;
            }
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)

这是表结构:

表格1: position_name - ref_id

表2: id - title

这段代码工作得非常好,唯一的问题是它显然非常低效,因为它必须扫描我的数据库表中的每一个项目才能只抓取几个选择项.

有没有办法让我$t1_items只能动态查询与每个引用ID相同的id的项目$t2_items?我需要一些优化,快速和轻量级的东西,以支持繁重的流量.

谢谢您的帮助!:)

Joh*_*ker 7

您是否尝试将表连接到一个查询中?

即:

select 
    t1.* 
from table1 t1 inner join 
     table2 t2 on t1.id = t2.ref_id
Run Code Online (Sandbox Code Playgroud)

将返回table1包含ref_id=idin 的行中的所有行table2.

  • 这是一个常见的初学者错误,在应用程序中处理重型数据库提升.id的匹配应该由数据库引擎处理. (2认同)