如何对IN语法进行反转?

时间:2011-06-05 14:39:15

标签: php sql

如果我有像

这样的代码
$vals = "50,60,40";

IN SQL

"SELECT * FROM TABLE WHERE col IN( $vals )"

如果我的值为50,并且我在SQL中包含“50,40,60”

,则为“否”

我如何选择

我指的是IN语法的反转

如果我在sql中有表包含像

这样的值
Firstname | Lastname | Age | Hobbies
Ahmed     | Ali      | 50  | run,swim
Mohammed  | Ahmed    | 30  | run

如果我想要谁可以在爱好中游泳

3 个答案:

答案 0 :(得分:6)

  

我的意思是IN语法的反转

您可以使用

NOT IN

运算符如果你有一个好的表结构。

你应该为Hobbies创建一个表,然后在你的person表中添加一个续约,因为现在完成这个任务的唯一方法是使用一个包含大量{{1}的丑陋SQL条件。

答案 1 :(得分:2)

我建议您更改架构,将值存储在一个单独的表中,并将FK存储到原始列。

 People
 ID - PK
 FirstName
 LastName 

 Hobbies
 ID -- PK
 Person_ID -- FK to People
 Hobby -- store your comma-separated values here

然后你可以做

select People.ID, People.FirstName, People.LastName
from People
   inner join Hobbies on People.ID = Hobbies.Person_ID
where Hobbies.Hobby = 'Swimming'

一个更好的结构可能有3个表,让你可以独立于人保持一系列爱好,只需保持每个人和他们的爱好之间的关系。

People
ID 
FirstName
LastName

Hobbies
ID
Hobby

PeopleHobbies
ID
Person_ID
Hobby_ID

与往常一样,考虑您的查询需求并在表上创建合适的索引以允许快速查找和连接。

答案 2 :(得分:2)

检查FIND_IN_SET()功能:

"SELECT * FROM TABLE WHERE FIND_IN_SET('swim', Hobbies) > 0"