2012-03-31 213 views
0

我的表是這樣的:選擇一列,其中滿足條件

ID Name_1   Name_2    Name_3 
1 Egon Spengler  Ives Dertway   Blade Ketlump 
2 Mac Taylor  Jedidiah Buckbolt Sarah Connor 
3 Sarah Connor  Modesto Slowfell  Jean-Luc Picard 
4 Jean-Luc Picard Beulah Cuxpan  Henry Jones 
5 Ellen Ripley  Adeline Finkdell  Ives Dertway 
6 James T. Kirk  Bertram Cam   Mac Taylor 
7 Henry Jones  Vidal Matton   Bertram Cam 

有一個在所有三個列永不相同的名稱,所以這是不可能發生的:

3 Sarah Connor  Sarah Connor  Sarah Connor 

我想選擇一個符合條件的名稱LIKE ='%value%', 問題是我永遠不知道要選擇哪一行,我不想全部選中它們。 此表中的人員是作者。還有關於書名,流派等的專欄。 我想僅在書籍的作者中進行搜索。

謝謝您的幫助...

+1

我只是做一個OR,然後檢查你使用的任何語言的每一列。另外,這個的最終目標是什麼?乍一看,如果這是您使用數據的方式,那麼您的表格可能會出現錯誤。 – Corbin 2012-03-31 09:16:41

+1

編輯完成後,你應該改變你的結構。如果一本書有4位作者,該怎麼辦?你打算添加另一列。看看一對多的關係和正常化。 – Corbin 2012-03-31 09:22:22

+0

是的,但是幾乎從未發生過我的書中有超過3位作者。我每本書大多有1或2本書。你提出什麼結構?作者是否應該放在其他表格中? – Simon 2012-03-31 09:24:47

回答

2

的方式你有你的數據結構,你可以做

SELECT [row info you need] 
FROM `table` 
WHERE Name_1 LIKE '%value%' 
    OR Name_2 LIKE '%value%' 
    OR Name_3 LIKE '%value%' 

或使用全文索引(你需要首先創建索引):

SELECT [row info you need] 
FROM `table` 
WHERE MATCH(names) AGAINST ('value') 

顯然使用這兩種不會告訴你哪個列已經匹配。

但你可能會更好重新設計架構這樣

table 
----- 
id 
[other info] 

names 
----- 
id 
name 

tables_names 
------------ 
table_id 
name_id 

這樣,你可以做一個簡單的INNER JOIN和避免單獨或條款,你就可以知道哪些值已符合你的很容易查詢。

+0

所以現在我有: book - id(pri),name1,name2,name3,title |我應該有: book - id(pri),authors_id,title | 作者 - authors_id,作者| – Simon 2012-03-31 09:34:04

+0

@Simon如果你每本書只有一個作者,那麼這將起作用。如果你有多個作者,你需要一個books_authors表(在我的例子中是「tables_names」)。 – liquorvicar 2012-03-31 09:35:48

+0

是的,我明白了..非常感謝你的幫助.. – Simon 2012-03-31 09:37:58

0

沒有重構表的結構,你不能做太多,唯一可行的辦法是:

SELECT * FROM table WHERE Name_1 LIKE '%xx%' or Name_2 LIKE '%xx%' OR Name_3 LIKE '%xx%' 
1

試試這個:

SELECT 

IF (
    Name_1 LIKE '%value%', 
    Name_1, 
    IF (
     Name_2 LIKE '%value%', 
     Name_2, 
     IF (
      Name_3 LIKE '%value%', 
      Name_3, 
      NULL 
     ) 
    ) 
) AS `Name` 

FROM 
    Table_Name 
WHERE 
    Name_1 LIKE '%value%' OR Name_2 LIKE '%value%' OR Name_3 LIKE '%value%' 
+0

不得不更新一個錯字:'AD \'Name \''顯然應該是'AS \'Name \''。 – MichaelRushton 2012-03-31 09:30:19