PHP MySQL!= / w值列表

时间:2011-01-17 21:40:48

标签: php sql mysql

是否可以使用带有一串值的mysql表中的单个查询来选择数据?我有以下查询,并尝试检索c.id_category不等于字符串中的任何值的结果。 其中包括“1,67,23,34,65”

等内容
   'SELECT DISTINCT c.*, 
          cl.*
     FROM `'._DB_PREFIX_.'category` c 
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` 
                                           AND `id_lang` = '.intval($params['cookie']->id_lang).')
LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON (cg.`id_category` = c.`id_category`)
    WHERE 1'.(intval($maxdepth) != 0 ? ' 
      AND `level_depth` <= '.intval($maxdepth) : '').'
      AND (c.`active` = 1 OR c.`id_category`= 1)
      AND c.`id_category` != VAR_ARRAY
      AND cg.`id_group` '.(!$cookie->id_customer ?  '= 1' : 'IN (SELECT id_group 
                                                                   FROM '._DB_PREFIX_.'customer_group 
                                                                  WHERE id_customer = '.intval($cookie->id_customer).')').'
 ORDER BY `level_depth` ASC, cl.`name` ASC'

5 个答案:

答案 0 :(得分:2)

像: SELECT * FROM Foo WHERE bar NOT IN(1,67,23,34,65); 听起来它符合你的需求。

答案 1 :(得分:1)

当然,在

中更改它
  

AND c。id_category NOT IN(VAR_ARRAY)

答案 2 :(得分:0)

试试这个:

SELECT DISTINCT c.*, cl.*
  FROM `'._DB_PREFIX_.'category` c 
  LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND `id_lang` = '.intval($params['cookie']->id_lang).')
  LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON (cg.`id_category` = c.`id_category`)
  WHERE 1'
  .(intval($maxdepth) != 0 ? ' AND `level_depth` <= '.intval($maxdepth) : '').'
  AND (c.`active` = 1 OR c.`id_category`= 1)
  AND c.`id_category` NOT IN (VAR_ARRAY)
  AND cg.`id_group` '.(!$cookie->id_customer ?  '= 1' : 'IN (SELECT id_group FROM '._DB_PREFIX_.'customer_group WHERE id_customer = '.intval($cookie->id_customer).')').'
  ORDER BY `level_depth` ASC, cl.`name` ASC'

答案 3 :(得分:0)

我认为你可以使用

SELECT * 
FROM TABLE t
WHERE t.id_category NOT IN ('1', '67', '23', '34', '65')

答案 4 :(得分:0)

您可以使用 IN 运算符检查值是否在值列表中,因此您可以编写类似

的条件
AND c.id_category in (1,67,23,34,65)

因为字符串包含该格式的值,所以您可以像这样构建查询:

"AND c.id_category in (" . VAR_ARRAY . ")"

但是如果此字符串来自外部源,则应检查此字符串是否有无效值以防止SQL注入。最好将字符串分解为单独的值,将每个值转换为int,并从这些值构建新的字符串。这样,你就可以防止SQL注入。