嘿,在我最近开始的一个项目中,我很高兴.
我有8个表需要连接,以便所有表内容将显示1个单一查询
但我努力想出正确的查询,因为我对SQL很新
我已经制作了一个数据库图表,显示了密钥彼此之间的关系,不介意那些没有分配箭头的信息.

所以基本上我只想加入所有8个表,这样我就可以通过php脚本编写例如.
$ result = mysql_query("SQL");
$ row = mysql_fetch_array($ result);
$ id = $ row ["value"]; 当然我会使用某种循环来显示多个项目
它将以我的首页上的多个项目结束,这些项目应该由该类别中的最新项目显示,我希望并假设这是一个简单的连接位置.
但总而言之,我正在寻找的是一个SQL,它将8个表与1个查询连接起来,这样我就可以使用8个表中任意一个的任何信息.
我想我找到了一个有效的解决方案
SELECT *
FROM Deal d
INNER JOIN DealPrice dp ON d.Id = dp.DealId
LEFT JOIN DealMedia dm ON d.Id = dm.DealId
LEFT JOIN StorageFile sf ON dm.Id = sf.binId AND sf.name = 'original_t'
LEFT JOIN DealLocation dl ON d.Id = dl.dealid
LEFT JOIN Location l ON dl.location = l.id
LEFT JOIN DealCategoryAssoc dca ON d.Id = dca.DealId
LEFT JOIN DealCategory dc ON dca.CategoryId = dc.id
LEFT JOIN I18N i ON dc.id = i.relatedId AND i.model = 'DealCategory' AND i.language = 'da_dk'
Run Code Online (Sandbox Code Playgroud)
我发现还有另一个表DealLocation我没有进入我的图表因此我自己改变了一些代码
我会在这个场景中使用a INNER JOINover LEFT JOIN,因为左连接将返回左表中的所有记录,即使右表中没有匹配,我认为你不想要 - 很难从问题中看出来
SELECT i18n.relatedid,
dealcategory.id,
dealcategoryassoc.dealid,
deal.location,
dealprice.pricevalue,
dealmedia.description,
location.city,
storagefile.extension,
storagefile.name,
storagefile.hash
FROM i18n
INNER JOIN dealcategory
ON i18n.relatedid = dealcategory.id
INNER JOIN dealcategoryassoc
ON dealcategory.id = dealcategoryassoc.categoryid
INNER JOIN deal
ON dealcategoryassoc.dealid = deal.id
INNER JOIN dealprice
ON deal.id = dealprice.dealid
INNER JOIN dealmedia
ON dealprice.dealid = dealmedia.dealid
INNER JOIN storagefile
ON dealmedia.id = storagefile.bindid
INNER JOIN location
ON deal.location = location.id
Run Code Online (Sandbox Code Playgroud)