【问题标题】:fetching images from multiple tables从多个表中获取图像
【发布时间】:2018-08-31 10:43:35
【问题描述】:

我正在建立一个小型在线商店,其中有一个名为“products”的父表和一个名为“images”的子表。

我遵循了最佳实践并设置了一个外键约束,其中字段product_id 建立了两个表之间的链接。

产品

product_id (PK parent table)
product_title
product_category_id
product-price
product_quantity
product_description
long_description
product_image

图片

image_id (PK for child table)
product_id (foreign key)
product_image_two

注意:每个产品将有 2 张图片,因此我想根据其 product_id 检索产品并从每个表中获取关联的图片。

即。查询从“产品”中提取product_image,从“图像”中提取product_image_two

我在这里浏览了大量关于 JOIN 的帖子,并试图重构其他人的代码,但到目前为止没有成功。

我目前的陈述

<?php

$query = query("SELECT p.* , i.* FROM products p,images i WHERE p.product_id=i.product_id"); 
confirm($query);  

while ($row = fetch_array($query)): 


?>

【问题讨论】:

  • 您能提供一些样本数据并期待结果吗?你能详细解释一下without success.
  • 您的问题究竟是什么?您是否收到错误、意外结果?
  • 是的,在我运行查询时澄清一下,它似乎只提取 product_image 而不是 product_image_two

标签: php mysql sql join


【解决方案1】:

听起来你想要的是LEFT JOIN。使用LEFT JOIN,您可以选择产品表中的所有内容,但如果产品表中存在相应的键,则只能选择图像表中的行。例如,您的查询可能如下所示:

SELECT p.* , i.* 
FROM products p,
LEFT JOIN images i ON
  p.product_id = i.product_id

这将返回 products 表中的每一行,如果不存在第二张图片,则为 images 表中的每一列返回 null 值。这是一个简化的演示:SQL Fiddle

【讨论】:

  • 欣赏转向 Barry,将试一试,基本上我所要做的就是从表 2 以及基于 id 的表 1 中拉出
  • 我有一个 escape_string 方法。转义字符串($_GET['id'])。 " ");根据这个和我上面的初始查询,完整的查询看起来如何,谢谢
  • 对不起@wengtee,我不熟悉PHP,所以我不会在这方面有太多用处。我假设您在问题中发布的代码正在运行,而您的问题是 SQL 问题,
【解决方案2】:

尝试使用内部连接:根据您的解释,它应该可以工作

SELECT p.product_id,p.product_image, i.product_image_two FROM products p
inner join images i on 
p.product_id=i.product_id

【讨论】:

  • 已修改 - 没有逗号
  • 不会运行,product_image_two 不在 products 表中
  • product_image_two 在图像表中,不是产品表,在我的代码中也来自图像表
猜你喜欢
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多