我想选择一种尚未翻译的语言。
omc_pages有
CREATE TABLE IF NOT EXISTS `omc_pages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`path` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`lang_id` int(10) NOT NULL,
...
PRIMARY KEY (`id`)
)
INSERT INTO `omc_pages` (`id`, `path`, ...`lang_id`) VALUES
(26, 'about_us',... 0),
(44, 'about_us', ...1)...这意味着path,about_us已经有英语和挪威语了。我假设key 0是英文的。
omc_languages有
CREATE TABLE IF NOT EXISTS `omc_languages` (
`id` int(25) NOT NULL AUTO_INCREMENT,
`langname` text COLLATE utf8_unicode_ci NOT NULL,
`status` enum('active','inactive') COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `omc_languages` (`id`, `langname`, `status`) VALUES
(1, 'norwegian', 'active'),
(2, 'french', 'active')...所以在这种情况下,我只想要“法语”。
我试过了,但给出了错误。
SELECT * FROM omc_languages WHERE omc_languages.id NOT IN
(SELECT lang_id FROM omc_pages WHERE omc_pages.path = $path)我也认为right join也许能够完成这项工作。
更新:我可以使用MySQL。错误如下所示。
Unknown column '$path' in 'where clause'
SELECT * FROM omc_languages WHERE omc_languages.id NOT IN (SELECT lang_id FROM omc_pages WHERE omc_pages.path = $path)发布于 2011-03-10 21:54:52
这应该是可行的:
select distinct omc_languages.*
from omc_languages
left join omc_pages on omc_pages.lang_id = omc_languages.id
where omc_pages.id is null但并没有真正优化。我在寻找另一种解决方案。
发布于 2011-03-10 22:52:13
好吧,你写的声明
SELECT * FROM omc_languages WHERE omc_languages.id NOT IN
(SELECT lang_id FROM omc_pages WHERE omc_pages.path = 'about_us')将给出字符串path在本例中为about_us未翻译的所有语言,如果这是您想要的。似乎您在使用@path变量时遇到了一些问题。但是,如果您想要尚未完全翻译的语言,您可以使用类似的方法,但不使用where子句。
SELECT * FROM omc_languages WHERE omc_languages.id NOT IN
(SELECT lang_id FROM omc_pages )当然,使用左连接也可以做到这一点。
发布于 2011-03-10 21:54:35
您好,使用right join很容易做到这一点:
SELECT *
FROM table1
RIGHT JOIN table2
ON table1.some_id = table2.some_id
WHERE table2.some_id IS NULL;希望这能有所帮助。
https://stackoverflow.com/questions/5260496
复制相似问题