选择一列,其中满足条件
我的表是这样的:选择一列,其中满足条件
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%', 问题是我永远不知道要选择哪一行,我不想全部选中它们。 此表中的人员是作者。还有关于书名,流派等的专栏。 我想仅在书籍的作者中进行搜索。
谢谢您的帮助...
的方式你有你的数据结构,你可以做
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和避免单独或条款,你就可以知道哪些值已符合你的很容易查询。
所以现在我有: book - id(pri),name1,name2,name3,title |我应该有: book - id(pri),authors_id,title | 作者 - authors_id,作者| – Simon 2012-03-31 09:34:04
@Simon如果你每本书只有一个作者,那么这将起作用。如果你有多个作者,你需要一个books_authors表(在我的例子中是“tables_names”)。 – liquorvicar 2012-03-31 09:35:48
是的,我明白了..非常感谢你的帮助.. – Simon 2012-03-31 09:37:58
没有重构表的结构,你不能做太多,唯一可行的办法是:
SELECT * FROM table WHERE Name_1 LIKE '%xx%' or Name_2 LIKE '%xx%' OR Name_3 LIKE '%xx%'
试试这个:
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%'
不得不更新一个错字:'AD \'Name \''显然应该是'AS \'Name \''。 – MichaelRushton 2012-03-31 09:30:19
我只是做一个OR,然后检查你使用的任何语言的每一列。另外,这个的最终目标是什么?乍一看,如果这是您使用数据的方式,那么您的表格可能会出现错误。 – Corbin 2012-03-31 09:16:41
编辑完成后,你应该改变你的结构。如果一本书有4位作者,该怎么办?你打算添加另一列。看看一对多的关系和正常化。 – Corbin 2012-03-31 09:22:22
是的,但是几乎从未发生过我的书中有超过3位作者。我每本书大多有1或2本书。你提出什么结构?作者是否应该放在其他表格中? – Simon 2012-03-31 09:24:47