PHP MYSQL 查询多个表,其中第二个表返回多行

标签 php mysql multiple-tables

我正在尝试查询 2 个表,其中第一个表将返回 1 行,第二个表将返回多行。所以基本上第一个表在页面上有返回文本,第二个表将返回一个列表,该列表将进入页面。两个表都有一个引用行,这是查询两个表的内容。 (见下文)

SELECT shop_rigs.*, shop_rigs_images.*, shop_rigs_parts.*
    FROM shop_rigs
    LEFT JOIN shop_rigs_images 
        ON shop_rigs.shoprigs_ref = shop_rigs_images.shoprigsimg_ref 
    LEFT JOIN shop_rigs_parts
        ON shop_rigs.shoprigs_ref = shop_rigs_parts.shoprigsparts_ref 
    WHERE shoprigs_enabled='1' AND shoprigs_ref='$rig_select'
    ORDER BY shoprigs_order ASC

只进行 2 次查询是否更好?

谢谢,

  • 丹妮

最佳答案

我会在两个查询中执行此操作。问题不在于效率或各个表的大小,问题在于您要创建一个 Cartesian product在 shop_rigs_images 和 shop_rigs_parts 之间。

这意味着,如果给定的 shop_rig 行包含三个图像和四个部分,您将得到该单个 shop_rig 的 3x4 = 12 行。

所以我会这样写:

SELECT ...
FROM shop_rigs
INNER JOIN shop_rigs_images 
    ON shop_rigs.shoprigs_ref = shop_rigs_images.shoprigsimg_ref 
WHERE shoprigs_enabled='1' AND shoprigs_ref='$rig_select'
ORDER BY shoprigs_order ASC

SELECT ...
FROM shop_rigs
INNER JOIN shop_rigs_parts
    ON shop_rigs.shoprigs_ref = shop_rigs_parts.shoprigsparts_ref 
WHERE shoprigs_enabled='1' AND shoprigs_ref='$rig_select'
ORDER BY shoprigs_order ASC

我省略了列的选择列表,因为我同意@Doug Kress 的观点,你应该只从给定的查询中选择你需要的列,而不是所有带有 * 的列。

关于PHP MYSQL 查询多个表,其中第二个表返回多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7127195/

相关文章:

php - Mysql - 如何在Order by之后获取行号?

php - 填充下拉选择列表

php - 获取mysql中删除的主键列表

php - Codeigniter 向类(class)添加多个类别(Academy-LMS)

Android:如何使用UriMatcher实现多表、查询参数、Activity的切换?

SQL - 如果至少有一项交易是今天,则计算交易数量

php - 今天/明天而不是 x 小时内碳

php - MySql 位列在 PHP 7.1 中返回奇怪的大数(在以前的版本中没有)

mysql - 查询 "the number of row"

sql - 在一个查询中对多个表进行多个左连接