【发布时间】:2015-11-24 21:36:42
【问题描述】:
我目前有 2 张桌子,假设 Table_A 包含数百个三明治以及有关它们和图片的信息,而 Table_B 包含特定的三明治组。例如:
Table_A 将有 4 列:
- 自动递增的第 1 列“id”
- 第 2 列“sandwich_name”,其中包含肉丸三明治 1、肉丸三明治 2、肉丸三明治 3、火鸡三明治 1 等
- 第 3 列“三明治类型”,在这种情况下为肉丸三明治、肉丸三明治、肉丸三明治、火鸡三明治
- 第 4 列“sandwich_picture”列,其中包含指向图片的链接。
Table_B 将有助于对三明治进行分类:
- 名为“sandwich_category”的第 1 列与 Table_A 中的第 3 列对应,包含标题“肉丸三明治”、“土耳其三明治”
-
第 2 列“featured_sandwich_id”,我可以从 Table_A 中选择三明治的 ID,我有一个 SELECT 语句来提取其特色图像:
SELECT featured_sandwich_id FROM Table_B WHERE sandwich_category='Meatball Sandwich' AND featured_sandwich_id != 0
然后我有一个 if/while 代码来加载特色三明治图像。
我遇到的问题是,在某些情况下,Table_A 中会有一个新的 sandwich_type,它在 Table_B 中还没有自己的 sandwich_category 行,在这种情况下,我希望代码自动从最最近从 Table_A 输入的三明治。换句话说,如果尚未在 Table_B 中设置 features_sandwich_id,我希望 select 语句自动从 Table_A 中提取最近发布的三明治的 ID 和图像。
我会尝试更具体,并写出我希望代码通过的过程:
- 1 为每种三明治类别自动创建的 div。
- 2:Div 包含 Table_B 的 Sandwich_category 名称,并检查 Table_B 中是否设置了 features_sandwich_id。
- 3:如果已设置 features_sandwich_id,则拉取 Table_A 中与三明治 id 关联的图像。
- 4:如果未设置 features_sandwich_id(或者由于某种原因尚未在 Table_B 中详细说明 Sandwich_category),请使用来自所述 sandwich_category 的最新三明治的 Sandwich_category 名称和图像,并将它们填充到上面的 div 中.
这是我当前的代码:
$QUERY = "(
SELECT Table_A.sandwich_picture, Table_A.sandwich_type, Table_B.featured_sandwich_id
FROM Table_A
LEFT JOIN Table_B
ON (Table_A.id = Table_B.featured_sandwich_id)
WHERE (Table_A.sandwich_type = 'Meatball Sandwich')
LIMIT 1)"
上述 LEFT JOIN 包含“肉丸三明治”和所有其他三明治类型的图像,但绝不是关联的特征三明治 ID 的图像。
将上面的语句切换为 RIGHT JOIN 始终具有 'Meatball Sandwich' 的 features_sandwich_id 和任何其他 Sandwich_type 的图像,但如果未在表中设置 features_sandwich_id,它会拉出 0 个结果。
这里以 PHP 的其余部分为例:
... while($query_results){
echo '<div class="sandwich_category">
<img src="$query_results['sandwich_picture']">
<br>
<p class="sandwich_category_name">';
echo $query_results['sandwich_category']; // This is the category name
echo '</p>
</div>';
}
据我了解,为了节省资源,最好将其压缩为单个语句,但是我无法确定正确的联接类型。
你知道如何做到这一点吗?
【问题讨论】:
-
在我看来,如果要查询最近添加的 ID,则需要在 Table_A 中添加
date_addedDATETIME 列。 -
感谢您的回复 - 这可能会有所帮助,但主要问题是如何组合表格,如果没有设置 features_sandwich_id 以从中提取图像,则从中提取图像最近输入的与 Sandwich_category 匹配的三明治 ID。
标签: php mysql join inner-join right-join