2011-05-18 67 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