连接表

时间:2017-10-31 07:29:49

标签: php mysql

表格颜色

    id
    value
    name

表格涵盖

    id
    headline_de
    headline_en
    subline_de
    subline_en
    backgroundcolor_id
    foregroundcolor_id

sql查询

    select covers.*,
    c1.name AS backgroundcolor_name,
    c1.value AS backgroundcolor_value,
    c2.name AS foregroundcolor_name, 
    c2.value AS foregroundcolor_value
    from covers
    join colors AS c1 on covers.backgroundcolor_id = c1.id
    join colors AS c2 on covers.foregroundcolor_id = c2.id

这是做什么的?

我将一些颜色与名称“颜色”存储在一起。然后我存储一些英语/德语标题+子行,并在表格“封面”中定义背景和前景色。 查询现在从“colors”表中加入正确的值 - 工作完美。

我需要改进的内容

当我删除任何颜色时,所以缺少颜色的ID - 查询会弹出一个PHP错误,或者只是不显示缺少颜色ID的行。

但是因为我想保留封面的sql结果 - 所以我可以显示封面,无论我是否有背景/前景色。有没有办法检查查询是否颜色不存在>替换为修复值以防止错误颜色ID的受影响封面出现PHP错误或缺少行结果?

2 个答案:

答案 0 :(得分:0)

无需撰写as on colors AS c1

select covers.*,
        c1.name AS backgroundcolor_name,
        c1.value AS backgroundcolor_value,
        c2.name AS foregroundcolor_name, 
        c2.value AS foregroundcolor_value
        from covers
        join colors c1 on covers.backgroundcolor_id = c1.id
        join colors c2 on covers.foregroundcolor_id = c2.id

答案 1 :(得分:0)

左连接返回连接左侧的所有内容以及找到匹配项的右侧所有内容,如果未找到匹配项,则返回连接的左侧,并从右侧返回null 。