我正在使用以下查询从3个表中提取数据。 2个在同一数据库中,1个在其他数据库中。基本上,我在一个表中有食谱,并且我正在使用recipieToCountry
表连接到countries
表,因此我知道该食谱属于哪个国家/地区。
$contentQuery = $page->dbf->query("
SELECT *
FROM recipes, recipeToCountry, content.countries
WHERE recipes.id = recipeToCountry.recipeId
AND recipeToCountry.countryId = content.countries.id
AND content.countries.origId = '$country'
");
我遇到的问题是,当我调用$content->title
时,它会返回countries
的标题。我的理解是recipies
是问题所在,因此我尝试将查询更改为此:
SELECT *
不幸的是,此查询有一个错误,我不确定如何解决。当我删除最后一个SELECT title, description, approved, active, id, recipeId, countryId
FROM recipes, recipeToCountry
WHERE recipes.id = recipeToCountry.recipeId
UNION
SELECT id, origId, null, null, null, null, null
FROM content.countries
WHERE content.countries.origId = 1
AND recipeToCountry.countryId = content.countries.id
时,AND
似乎也无法正常工作。对我可以进行哪些更改以获取正确的列有任何想法吗?
答案 0 :(得分:0)
简单的JOIN应该可以很好地工作:
select r.*, c.*
from recipes r
join repiceToCountry rc on r.id = rc.recipeId
join content.countries c on c.id = rc.countryId
where c.origId = '$country'
您必须确保您在另一个数据库上拥有SELECT
特权。
此外,您可以将r.*, c.*
替换为要显示的特定列。
答案 1 :(得分:0)
很久以前,我养成了一种习惯,总是将表别名/名称放在查询中的每个字段之前。这样,您以后就可以修改查询,而不必担心在向查询中添加表时字段名称会发生冲突。我还喜欢将联接添加到多个FROM表。 (更容易看到逻辑)
我将您的第一个查询更改为此:
SELECT r.*, c.country /* any other fields in country besides title */
FROM recipes as r
LEFT JOIN recipeToCountry as rtc ON rtc.recipeId = r.id
LEFT JOIN content.countries as c ON c.id = rtc.countryId
WHERE c.origId = '$country'
您可以省略“ as”一词,使其看起来更整洁,但我将其保留在其中以显示发生了什么事。