我使用下面的查询从3个表中提取数据。2个在同一个数据库中,1个在不同的数据库中。基本上我在一张table上有食谱,我用的是 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
这个 UNION
似乎不太管用。我能做些什么改变来得到正确的栏目,你有什么想法吗?
2条答案
按热度按时间4szc88ey1#
简单联接应该很好地工作:
你必须确保你有
SELECT
其他数据库的权限。此外,您还可以替换
r.*, c.*
按要显示的特定列。f0brbegy2#
我很久以前就养成了一个习惯,总是把表别名/名称放在查询的每个字段之前。这样,您就可以在以后修改查询,而不用担心在向查询中添加表时字段名会发生冲突。我也更喜欢联接而不是来自多个表(更容易理解逻辑)
我将您的第一个查询改为:
你可以把“as”这个词留出来让它看起来更干净,但我把它放在那里是为了更好地显示发生了什么。