MySQL 从多个 table 获取数据
MySQL get data from the multiple table
我有一个 eg_design
table,其中包含以下列:
和 eg_domains
table 其中有以下列:
和 eg_fonts
table 其中有以下列:
现在,基于 $domain_id 我想从 eg_design
table 获取所有数据,一些数据来自 eg_domains
table 和 font_name 列值来自 eg_fonts
table But 在 eg_design
table 我有 2 个字体 ID 存在于 design_font 和 domain_font列。
所以,下面的查询应该给我 2 font_name 来自 eg_fonts
table 和 eg_design
table 我有 2 个字体 ID。
$get_domain = mysqli_query( $mysqli, "SELECT edg.*, ed.domain_name, egf.*
FROM eg_design AS edg
LEFT JOIN eg_domains AS ed ON edg.domain_id = ed.domain_id
LEFT JOIN eg_fonts AS egf ON egf.font_id = edg.design_font AND egf.font_id = edg.domain_font
WHERE edg.domain_id = '$domain_id' ");
但我认为这条线
egf.font_id = edg.design_font AND egf.font_id = edg.domain_font
以上查询无效。
我的意思是我可以获取所有数据但无法获取 font_name 列值。它只是 return design_font 列值而不是 domain_font 列值。
你能帮我修一下吗?
这里是fiddle:https://www.db-fiddle.com/f/mNscdKDNohpT3xidp3C9Mw/0
查看更新的答案
https://www.db-fiddle.com/f/mNscdKDNohpT3xidp3C9Mw/5
SELECT edg.*, ed.domain_name, egf.font_name
FROM eg_design edg
LEFT JOIN eg_domains ed ON edg.domain_id = ed.domain_id
LEFT JOIN eg_fonts egf ON egf.font_title = edg.design_font
WHERE edg.domain_id = 1
基本上,您只需要将相同的 table eg_fonts
左连接两次即可。
参见 dbfiddle。您可以尝试以下查询:
$get_domain = mysqli_query( $mysqli, "SELECT edg.*, ed.domain_name, egf.font_name AS design_font_name , egf2.font_name AS domain_font_name
FROM eg_design AS edg
LEFT JOIN eg_domains AS ed ON edg.domain_id = ed.domain_id
LEFT JOIN eg_fonts AS egf ON egf.font_id = edg.design_font
LEFT JOIN eg_fonts AS egf2 ON egf2.font_id = edg.domain_font
WHERE edg.domain_id = '$domain_id' ");
改变这个:
LEFT JOIN eg_fonts AS egf ON egf.font_id = edg.design_font AND egf.font_id = edg.domain_font
为此:
LEFT JOIN eg_fonts AS egf ON egf.font_id = edg.design_font
LEFT JOIN eg_fonts AS egf2 ON egf2.font_id = edg.domain_font
我有一个 eg_design
table,其中包含以下列:
和 eg_domains
table 其中有以下列:
和 eg_fonts
table 其中有以下列:
现在,基于 $domain_id 我想从 eg_design
table 获取所有数据,一些数据来自 eg_domains
table 和 font_name 列值来自 eg_fonts
table But 在 eg_design
table 我有 2 个字体 ID 存在于 design_font 和 domain_font列。
所以,下面的查询应该给我 2 font_name 来自 eg_fonts
table 和 eg_design
table 我有 2 个字体 ID。
$get_domain = mysqli_query( $mysqli, "SELECT edg.*, ed.domain_name, egf.*
FROM eg_design AS edg
LEFT JOIN eg_domains AS ed ON edg.domain_id = ed.domain_id
LEFT JOIN eg_fonts AS egf ON egf.font_id = edg.design_font AND egf.font_id = edg.domain_font
WHERE edg.domain_id = '$domain_id' ");
但我认为这条线
egf.font_id = edg.design_font AND egf.font_id = edg.domain_font
以上查询无效。
我的意思是我可以获取所有数据但无法获取 font_name 列值。它只是 return design_font 列值而不是 domain_font 列值。
你能帮我修一下吗?
这里是fiddle:https://www.db-fiddle.com/f/mNscdKDNohpT3xidp3C9Mw/0
查看更新的答案
https://www.db-fiddle.com/f/mNscdKDNohpT3xidp3C9Mw/5
SELECT edg.*, ed.domain_name, egf.font_name
FROM eg_design edg
LEFT JOIN eg_domains ed ON edg.domain_id = ed.domain_id
LEFT JOIN eg_fonts egf ON egf.font_title = edg.design_font
WHERE edg.domain_id = 1
基本上,您只需要将相同的 table eg_fonts
左连接两次即可。
参见 dbfiddle。您可以尝试以下查询:
$get_domain = mysqli_query( $mysqli, "SELECT edg.*, ed.domain_name, egf.font_name AS design_font_name , egf2.font_name AS domain_font_name
FROM eg_design AS edg
LEFT JOIN eg_domains AS ed ON edg.domain_id = ed.domain_id
LEFT JOIN eg_fonts AS egf ON egf.font_id = edg.design_font
LEFT JOIN eg_fonts AS egf2 ON egf2.font_id = edg.domain_font
WHERE edg.domain_id = '$domain_id' ");
改变这个:
LEFT JOIN eg_fonts AS egf ON egf.font_id = edg.design_font AND egf.font_id = edg.domain_font
为此:
LEFT JOIN eg_fonts AS egf ON egf.font_id = edg.design_font
LEFT JOIN eg_fonts AS egf2 ON egf2.font_id = edg.domain_font