如何在mysql中使用IN运算符

时间:2014-09-20 10:16:51

标签: php mysql

假设我有一个如下表格

DealId类别
1个服装
2衣服,鞋子和配件
3鞋子和配件
4个珠宝
5个服装,首饰

现在假设我得到类似的类别 $data['categories']='clothes,Shoes and accessories';

我使用以下代码:

$cat=$_REQUEST['categories'];
$query=mysql_query("select * from Deals where Categories IN ($cat)");
while($row=mysql_fetch_assoc($query))
{
    echo json_encode($row);
}

我收到了一个错误,我也使用了split()函数和其他技术,但是我没有得到好的结果。
我需要选择所有包含“衣服”和“鞋子和配件”的行

5 个答案:

答案 0 :(得分:1)

你的IN运算符应该是这样的

IN('Clothes','Shoes','accessories','jewelery');

所以你的$ cat变量应该具有根据IN operater

的值

答案 1 :(得分:1)

The IN operator allows you to determine if a specified value matches any one of a list or a subquery

您可以像

一样使用它
select * from Deals where Categories IN ('value1','value2' etc)

答案 2 :(得分:1)

我认为您创建数据库的方式存在问题,因为它并不尊重第一个正常形式。

http://en.wikipedia.org/wiki/Database_normalization#Normal_forms

此外,IN会将给定值的列表与数据库中字段的整个值进行比较(在您的情况下,例如'衣服,鞋子和配件'),而mysql不会解析字符串来查找其中的单词。

http://www.tutorialspoint.com/mysql/mysql-in-clause.htm

答案 3 :(得分:0)

我喜欢这个类别& 2

答案 4 :(得分:0)

你可以试试这个

<?php
$cat=$_REQUEST['categories'];
$catArray=explode(",",$cat);
$sqlSearch='';
foreach($catArray as $onecat) {
    $sqlSearch= ($sqlSearch!=''?' OR':'WHERE ')."Categories LIKE '%".$onecat."%' "; 
}
$cat=str_replace(",","','",$cat);
$query=mysql_query("select * FROM Deals".$sqlSearch);
while($row=mysql_fetch_assoc($query)){
    echo json_encode($row);
}
?>