【发布时间】:2021-05-05 00:23:34
【问题描述】:
当我将这段 SQL 输入 PHPMyAdmin 时,它返回的结果与我的预期不符
SELECT
*
FROM
`wtlaptop`
WHERE
`laptopgpu` LIKE '%GTX%'
OR
`laptopgpu` LIKE '%RTX%'
AND
`memorysize` LIKE '%16GB%'
OR
`memorysize` LIKE '%32GB%'
OR
`memorysize` LIKE '%64GB%'
AND
`laptopbrand` LIKE '%Asu%'
ORDER BY
ABS(`productprice` - 3145)
我的目的是找到华硕制造的具有 GTX GPU 或 RTX GPU 以及 16GB 或 32GB 内存的笔记本电脑,然后从最接近用户输入的价格订购。
但是,当我在 PHPMyAdmin 中运行此查询时,我得到的结果有 8GB 内存,而结果不是来自 ASUS 等品牌。 示例
3128
Intel Core i7
32GB
Nvidia GTX 1650 Ti
Windows 10 Home
HP
我的表结构是
productprice varchar(61),
cpufamily varchar(25),
memorysize varchar(20),
laptopgpu varchar(28),
laptopos varchar(32),
laptopbrand varchar(9)
【问题讨论】:
-
数据质量是零售产品数据库的一个大问题——您确定
memorysize中的所有条目都不包含空格或不同的单位吗?例如'32'vs'32 GB'vs'32GB'vs'32768MB'?我强烈建议您在导入数据时首先对其进行规范化,这样您就可以使用强类型列来避免此类问题(因此memorysize是int,以兆字节为单位,而不是varchar)。