2011-05-18 77 views
0

這是我的第一個stakoverflow問題,雖然我已經潛伏了很長一段時間。我正在寫在PHP/SQLite的web應用程序,而我試圖找到一個列名連同下面的SQL查詢:用於查找列中匹配文本的列名的SQL查詢

SELECT lexemeid FROM lexeme, sense WHERE lexeme.lexemeid = 
sense.senselexemeid AND (lexeme.lexeme LIKE '%apani%' OR lexeme.variant 
LIKE '%apani%' OR lexeme.affixedform LIKE '%apani%' OR sense.example 
LIKE '%apani%'); 

基本上,我提供一個全文查找了幾個不同的領域。上面的查詢工作,但我想獲得我的通配符爲每個結果匹配的列的名稱。基本上,我想是與選擇上面的查詢看起來更像是:

SELECT lexemeid, COLUMN NAME FROM... 

我還歡迎使我的SQL查詢一下任何想法/更好的表現(可能使用LIKE和IN?)。我基本上試圖加入lexeme.lexemeid和sense.senselexemeid,並對文本字符串(本例中爲「apani」)進行通配符查找。

謝謝!

回答

1

假設您只在其中一列中有匹配項,您可以使用CASE語句。

SELECT lexemeid, 
     CASE WHEN lexeme.lexeme LIKE '%apani%' THEN 'lexeme' 
      WHEN lexeme.variant LIKE '%apani%' THEN 'variant' 
      ... 
      WHEN sense.example LIKE '%apani%' THEN 'example' 
     END AS ColumnName 
    FROM ... 
+0

這樣做,好的。如果其中一列出現匹配,會發生什麼情況?我想讓每個lexemeid都顯示出來,並且按照加權順序顯示列(從上面的查詢中列出,從最重要到最不重要的部分)。我的意思是,如果某事匹配了所有四列,我希望我的查詢返回:903 | lexeme,但是如果它只匹配最後兩個,我希望它返回903 | affixedform。將顛倒我的查詢順序做到這一點? – Russianspi 2011-05-18 21:47:45

+0

要回答我自己的評論,它看起來已經完全符合它的要求。謝謝! – Russianspi 2011-05-18 21:56:18