从多个表中获取图像

时间:2018-08-31 10:43:36

标签: php mysql sql join

我正在建立一家小型网上商店,在那里有一个名为“产品”的父表和一个名为“图像”的子表。

我遵循了最佳实践,并使用字段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)): 


?>

2 个答案:

答案 0 :(得分:1)

听起来您想要的是LEFT JOIN。使用LEFT JOIN,可以选择产品表中的所有内容,但是如果图像表中的行对应于产品表中的行,则只能选择图像表中的行。因此,例如,您的查询可能类似于:

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

这将返回产品表中的每一行,如果不存在第二张图像,则返回图像表中每一列的null值。这是此操作的简化演示:SQL Fiddle

答案 1 :(得分:0)

尝试使用内部联接:根据您的解释,它应该起作用

using System;
using System.Linq;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        var doc = XDocument.Load("test.xml");
        XNamespace ns = "http://www.abcd.com/dxl";
        var sentToValues = doc.Root
            .Elements(ns + "item")
            .Where(item => (string) item.Attribute("name") == "SentTo")
            .Select(item => (string) item.Element(ns + "text"))
            .ToList();
        foreach (var value in sentToValues)
        {
            Console.WriteLine(value);
        }
    }
}