我正在尝试使我的网站使用的查询更有效率。
由于对 SQL 有点含糊,我还没有真正学会如何使用嵌套查询,但我刚刚设法获得了非常接近我想要的东西。
我卖吉他,我有一个大数据库,其中单独列出了具有不同表面处理选项的所有产品。项目在 dB 中具有唯一 ID,但按其标题分组,例如,Gibson Les Paul Standard 在我的 dB 中列出了 7 次,有 7 种不同的表面处理选项。并非所有成品选项都一定具有相同的价格,也并非所有成品选项都一定有现货。
在我网站的搜索结果页面中,我希望能够显示:
1) 每个产品只有一个记录,即 Gibson LP Std 有 1 个记录,然后可以子链接到不同的饰面。
2) 显示的实际产品必须是最便宜的成品选项,或者是库存中最便宜的。
这目前正在我的网站上运行,但它正在使用 N+1 查询并且运行速度似乎非常慢,但是要了解我的意思的示例,请单击此处:http://www.hartnollguitars.co.uk/search.asp?subcat=Gibson-Les-Pauls (如果该死的东西有效的话)
第 1 部分很好,我可以在 SQL 中对标题进行分组,这就是问题所在。
使用以下 SQL 查询,我可以获得最低价和最高价,我已经计算了有多少变体,我还有最大和最小库存水平。
results.Open "SELECT * FROM
(SELECT *, count(id) as Variants, MAX(price) as highestPrice, MIN(price) as
lowestPrice, MAX(shopstock) as highestStock, MIN(shopstock) as lowestStock FROM
products WHERE item LIKE '%"& replace([searchterm]," ","%") &"%' GROUP BY item)
AS UnknownVar LIMIT 40", conn, 3, &H0001
我需要做的是获取代表最大和最小库存和价格的行的 ID 值。
我基本上需要能够在其上运行 if/or 逻辑,但我不确定这是否可行。
所以,我需要能够说
if Item_With_Cheapest_Price is in stock, display this as the thumbnail & link
else
display first item in price sorted list where stock >=1
我还需要一个回退,如果没有成品库存,显示最便宜的。
数据库是使用 ODBC 连接的 MySQL,我目前正在使用经典 ASP 编写脚本,但打算升级到 .NET,一旦我弄清楚了如何!!! :-)
最佳答案
我认为对于按部分排序你应该使用类似的东西
order by case
when stock > 0 then 0
when stock < 0 then 1
end ascending,
price ascending
我没有检查语法,但就是这样。您可以按顺序搜索案例以获取更多信息。
至于你们其他的需求,我需要表结构来更好地理解...
关于mysql - 如何在 SQL 中获取具有 MAX 和 MIN 值的行的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7663744/