我正在建立一家小型网上商店,在那里有一个名为“产品”的父表和一个名为“图像”的子表。
我遵循了最佳实践,并使用字段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)):
?>
答案 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);
}
}
}