我需要加入两个表:
国家/地区表
country|lang1|lang2|lang3|lang4
Canada |1 |2 |NULL |NULL
US |1 |NULL |NULL |NULL
和
语言表
id|language
1 |English
2 |French
我想使用语言名称返回我的国家/地区表中两行的值。
我该怎么做?
我试过了:
SELECT * FROM en_countries LEFT JOIN all_languages
ON (all_languages.id = en_countries.lang1 AND all_languages.id = en_countries.lang2)
但这并没有给我语言名称。我该怎么做?
如果有人能以Active Record格式给我这个,那将是一个奖励。我正在为CodeIgniter做这个。
答案 0 :(得分:1)
我不确定我的问题是否正确,但听起来你应该使用的是inner join
而不是left join
。 See this
select country.*
from en_countries as country
join all_languages as lang1
on lang1.id = country.lang1
join all_languages as lang2
on lang2.id = country.lang2
-- optionally:
where lang1.id = ?
and lang2.id = ?
答案 1 :(得分:1)
我认为这里的问题是(all_languages.id = en_countries.lang1 AND all_languages.id = en_countries.lang2)
而不是尝试
SELECT * FROM en_countries LEFT JOIN all_languages
ON (all_languages.id = en_countries.lang1 OR all_languages.id = en_countries.lang2)
'和'意味着一种语言应该是一个国家的第一语言和第二语言,用'或'替换它可能会成功
答案 2 :(得分:1)
首先,您使用AND
表示只有lang1等于lang2的记录才会加入。我相信你需要这样的东西:
SELECT c.*, l1.language as lang1_name, l2.language as lang2_name
FROM en_countries c
LEFT JOIN all_languages l1 ON (l1.id = c1.lang1)
LEFT JOIN all_languages l2 ON (l2.id = c1.lang2)
答案 3 :(得分:0)
您需要从all_languages中选择两次
SELECT en_countries.country, t1.language as lang1, t2.language as lang2 FROM en_countries
JOIN all_languages AS t1 ON t1.id = en_countries.lang1
JOIN all_languages AS t2 ON t2.id = en_countries.lang2
然后我相信你在php中访问$ row-> lang1