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


PHP MYSQL Query Multiple Tables Where the Second Table returns multiple rows

我试图查询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个查询更好吗?

谢谢,

  • 戴恩

我将在两个查询中执行此操作。问题不在于效率或各自表的大小,问题在于您在shop_rigs_images和shop_rigs_parts之间创建了笛卡尔积。

意思是,如果一个给定的行shop_rig有三个图像和四个部分,您将得到3x4 = 12行对于单个shop_rig。

我是这样写的:

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的观点,你应该只选择你需要从一个给定的查询列,而不是所有的列与*

如果要从第一个表中提取大量数据,那么最好执行两个查询。

另外,为了提高效率,最好指定实际需要的每一列,而不是所有列,这样可以获取和检索更少的数据。

连接通常比运行2个查询更有效,只要您在索引上连接,但这取决于您的数据和索引。您可能想要运行"explain SELECT ....."为两个选项,并比较"可能的键"answers"行"从您的结果。