2011-03-10 43 views
2

我想選擇一種尚未翻譯的語言。如何選擇不在其他表格中的項目

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)... 

這意味着路徑,about_us有英語和挪威語了。我假設關鍵字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) 

我也認爲righ加入可能能夠完成這項工作。

我感謝您的幫助。 在此先感謝。

更新:我使用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) 
+0

您正在使用哪個數據庫?底部的sql給了什麼錯誤? – 2011-03-10 13:54:57

+0

我不確定你想要得到什麼數據?只是一個特定語言的所有頁面?或者特定路徑中的所有語言? – 2011-03-10 13:55:26

+1

你會得到什麼錯誤?是因爲'$ path'沒有被引用嗎?只要子查詢不返回任何'NULL','NOT IN'應該工作,但是與JOIN相比,MySQL中子查詢的性能相當差。 – 2011-03-10 13:56:15

回答

-2

你好,這是相當簡單的用權做加盟:

SELECT * 
FROM table1 
RIGHT JOIN table2 
ON table1.some_id = table2.some_id 
WHERE table2.some_id IS NULL; 

希望這有助於。

+1

這將不起作用,右連接只保留連接表中存在數據的行(即您的示例中的表2),因此結果將始終爲空。 – krtek 2011-03-10 13:56:10

0

這應該工作:

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 

但是是不是真的優化。我正在尋找另一種解決方案。

0

很好的發言,你已經寫

SELECT * FROM omc_languages WHERE omc_languages.id NOT IN 
(SELECT lang_id FROM omc_pages WHERE omc_pages.path = 'about_us') 

會給大家在這種情況下about_us字符串path不翻譯的語言,如果這就是你想要的。看來你對這個@path變量有一些問題。 但是,如果你想要還沒有完全翻譯的語言,你可以使用類似的方法,而不使用where子句。

SELECT * FROM omc_languages WHERE omc_languages.id NOT IN 
(SELECT lang_id FROM omc_pages) 

當然這也可以使用左連接。

相關問題