我正在努力使我的网站使用的查询更加高效。
由于对 SQL 有点模糊,我还没有真正学会如何使用嵌套查询,但我刚刚设法得到了一些非常接近我想要的东西。
我销售吉他,我有一个大数据库,其中单独列出了具有不同饰面选项的所有产品。项目在 dB 中具有唯一 ID,但按标题分组,例如,Gibson Les Paul Standard 在我的 dB 中列出了 7 次,有 7 种不同的饰面选项。并非所有饰面选项都一定具有相同的价格,也并非所有饰面选项都一定有库存。
在我网站的搜索结果页面中,我希望能够显示:
1) 每个产品只有一条记录,即 Gibson LP Std 的 1 条记录,然后可以将其子链接到不同的饰面。
2) 实际展示的产品必须either是最便宜的饰面选项,或者是最便宜的库存。
目前,它正在我的网站上运行,但它使用 N+1 查询,并且运行速度似乎非常慢,但有关我的意思的示例,请单击此处:http://www.hartnollguitars.co.uk/search.asp?subcat=Gibson-Les-Pauls http://www.hartnollguitars.co.uk/search.asp?subcat=Gibson-Les-Pauls(如果该死的东西有效的话)
第一部分很好,我可以用 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,一旦我弄清楚了如何升级! :-)