是否可以使用带有一串值的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'
答案 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注入。