我目前有 2 张桌子,假设 Table_A 包含数百个三明治以及有关它们和图片的信息,而 Table_B 包含特定的三明治组。例如:
Table_A 将有 4 列:
- 自动递增的第 1 列“id”
- 第 2 列“sandwich_name”,其中包含肉丸三明治 1、肉丸三明治 2、肉丸三明治 3、火鸡三明治 1 等
- 第 3 列“三明治类型”,在这种情况下是 Meatball Sandwich、Meatball Sandwich、Meatball Sandwich、Turkey Sandwich
- 第 4 列“sandwich_picture”列,其中包含图片的链接。
Table_B 将有助于对三明治进行分类:
- 第 1 列名为“sandwich_category”,对应于 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 行,在这种情况下,我想让代码自动从最近输入的三明治中提取图像从表_A。换句话说,在 Table_B 中尚未设置 features_sandwich_id 的情况下,我希望 select 语句自动从 Table_A 中提取最近发布的三明治的 ID 和图像。
我将尝试更具体并写出我希望代码通过的过程:
- 1 为每种三明治类别自动创建的 div。
- 2:Div 包含Table_B 的sandwich_category 名称,并检查Table_B 中是否设置了featured_sandwich_id。
- 3:如果已经设置了featured_sandwich_id,则拉取Table_A中三明治id关联的图片。
- 4:如果未设置featured_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>';
}
据我了解,为了节省资源,最好将其压缩为一个语句,但是我无法确定正确的连接类型。
关于如何做到这一点的任何想法?