2012-03-31 104 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

相关问题