我正在尝试查询 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/