我有一个包含由双管分隔的值的单元格。我正在尝试使用以下内容搜索此单元格的内容,(其中10是要搜索的数字)%10,10%,%10%和10
我的查询似乎只返回10.没有其他变体。有人可以告诉我为什么它不起作用吗?
非常感谢提前。 (您在下面看到的SQL查询是从准备好的PDO查询语句中导出的内容)
SELECT `Hat`.`id` AS `Hat_id` , `Hat`.`hatCode` AS `Hat_hatCode` , `Hat`.`hatCodeOther` AS `Hat_hatCodeOther` , `Hat`.`name` AS `Hat_name` , `Hat`.`description` AS `Hat_description` , `Hat`.`colorId` AS `Hat_colorId` , `Hat`.`collectionId` AS `Hat_collectionId` , `Hat`.`mainPicture` AS `Hat_mainPicture` , `Hat`.`subPicture` AS `Hat_subPicture` , `Hat`.`type` AS `Hat_type` , `Hat`.`featured` AS `Hat_featured` , `Hat`.`published` AS `Hat_published` , `Hat`.`deleted` AS `Hat_deleted`
FROM `modx_hats` AS `Hat`
WHERE (
(
`Hat`.`published` =1
AND `Hat`.`collectionId` = '1'
)
AND `Hat`.`colorId` = '%||10||%'
OR `Hat`.`colorId` = '10||%'
OR `Hat`.`colorId` = '%||10'
OR `Hat`.`colorId` = '10'
)
LIMIT 0 , 30
答案 0 :(得分:10)
我认为您应该使用LIKE而不是=:
AND `Hat`.`colorId` LIKE '%||10||%'
OR `Hat`.`colorId` LIKE '10||%'
OR `Hat`.`colorId` LIKE '%||10'
OR `Hat`.`colorId` = '10'
答案 1 :(得分:3)
对于野外车,您应该使用LIKE
试试这个:
SELECT `Hat`.`id` AS `Hat_id` , `Hat`.`hatCode` AS `Hat_hatCode` , `Hat`.`hatCodeOther` AS `Hat_hatCodeOther` , `Hat`.`name` AS `Hat_name` , `Hat`.`description` AS `Hat_description` , `Hat`.`colorId` AS `Hat_colorId` , `Hat`.`collectionId` AS `Hat_collectionId` , `Hat`.`mainPicture` AS `Hat_mainPicture` , `Hat`.`subPicture` AS `Hat_subPicture` , `Hat`.`type` AS `Hat_type` , `Hat`.`featured` AS `Hat_featured` , `Hat`.`published` AS `Hat_published` , `Hat`.`deleted` AS `Hat_deleted`
FROM `modx_hats` AS `Hat`
WHERE (
(
`Hat`.`published` =1
AND `Hat`.`collectionId` = '1'
)
AND `Hat`.`colorId` LIKE '%||10||%')
OR `Hat`.`colorId` LIKE '10||%'
OR `Hat`.`colorId` LIKE '%||10'
OR `Hat`.`colorId` LIKE '10'
)
LIMIT 0 , 30
答案 2 :(得分:2)
你能试试吗,另外,为了获得更好的结果,为所有()
添加了OR
,即分组
WHERE (
(
`Hat`.`published` =1
AND `Hat`.`collectionId` = '1'
)
AND ( `Hat`.`colorId` LIKE '%||10||%'
....^
OR `Hat`.`colorId` LIKE '10||%'
OR `Hat`.`colorId` LIKE '%||10'
OR `Hat`.`colorId` = '10'
)
..^
)
LIMIT 0 , 30
答案 3 :(得分:2)
根据你的架构/数据/查询看看这个运行的sql小提琴: http://sqlfiddle.com/#!2/48da8/3
您应该使用LIKE
运算符,并根据AND
和OR
优先级正确设置括号。此外,清理您的查询,它看起来像这样:
SELECT Hat.id AS Hat_id,
Hat.hatcode AS Hat_hatCode,
Hat.hatcodeother AS Hat_hatCodeOther,
Hat.name AS Hat_name,
Hat.description AS Hat_description,
Hat.colorid AS Hat_colorId,
Hat.collectionid AS Hat_collectionId,
Hat.mainpicture AS Hat_mainPicture,
Hat.subpicture AS Hat_subPicture,
Hat.type AS Hat_type,
Hat.featured AS Hat_featured,
Hat.published AS Hat_published,
Hat.deleted AS Hat_deleted
FROM modx_hats AS Hat
WHERE Hat.published = 1
AND Hat.collectionid = '1'
AND ( Hat.colorid LIKE '%||10||%'
OR Hat.colorid LIKE '10||%'
OR Hat.colorid LIKE '%||10'
OR Hat.colorid LIKE '10' )
LIMIT 0, 30
只要您不使用受限制的命名字符(如空格字符),就不需要反引号。
答案 4 :(得分:1)
我相信你想要的是:
SELECT
id AS Hat_id,
hatCode AS Hat_hatCode,
hatCodeOther AS Hat_hatCodeOther,
name AS Hat_name,
description AS Hat_description,
colorId AS Hat_colorId,
collectionId AS Hat_collectionId,
mainPicture AS Hat_mainPicture,
subPicture AS Hat_subPicture,
`type` AS Hat_type,
featured AS Hat_featured,
published AS Hat_published,
deleted AS Hat_deleted
FROM modx_hats
WHERE
published = 1
AND
collectionId = '1'
AND (
colorId = '%||10||%'
OR colorId = '10||%'
OR colorId = '%||10'
OR colorId = '10'
)
LIMIT 0, 30
请注意,我从所有表和列定义中删除了反引号,但“type”是保留字。
答案 5 :(得分:1)
你需要逃避百分比符号
这个question的答案应该告诉你如何做到这一点。
击>
你也可以像这样创建一个
SELECT * FROM HatTable
WHERE colorId LIKE '%10%'
这应该会为你提供包含10个选项的所有选项。
<强>更新强>
这将为您提供包含10
的任何内容。所以这可能不是你想要的。
使用上述查询进行选择的示例
3210
|| || 10
|| 10
10 ||
10
1032
435262 10 32456234