Я пытаюсь сделать запросы, которые использует мой веб-сайт, более эффективными.
Будучи немного расплывчатым в отношении SQL, я не совсем научился использовать вложенные запросы, но мне только что удалось получить что-то, что довольно близко к тому, что я хочу.
Я продаю гитары, у меня есть большая база данных со всеми продуктами с различными вариантами отделки, перечисленными индивидуально. Элементы имеют уникальные идентификаторы в дБ, но сгруппированы по их названию, например, стандарт Gibson Les Paul указан в моем дБ 7 раз с 7 различными вариантами финиша. Не все варианты отделки обязательно будут иметь одинаковую цену, и не все варианты отделки обязательно будут в наличии.
На странице результатов поиска моего сайта я хочу показать:
1) Всего одна запись на продукт, т.е. 1 запись для Gibson LP Std, которая затем может быть связана с различными видами отделки.
2) Фактически отображаемый продукт должен либо быть самым дешевым вариантом отделки, ИЛИ самым дешевым на складе.
В настоящее время это работает на моем веб-сайте, но использует N + 1 запросов и, кажется, работает ужасно медленно, но для примера того, что я имею в виду, нажмите здесь: http://www.hartnollguitars.co.uk/search.asp?subcat=Gibson-Les-Pauls (если кровавая штука работает )
Первая часть в порядке, я могу просто сгруппировать заголовок в SQL, проблема в части 2.
Используя следующий запрос 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
Что мне нужно сделать, это получить значение идентификатора для строк, представляющих максимальные и минимальные значения акций и цен.
Мне, в принципе, нужно иметь возможность работать, если / или на нем есть логика, и я не уверен, возможно ли это.
Итак, мне нужно сказать
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
Мне также нужно отступить, если на складе нет ни одного покрытия, покажите самый дешевый.
База данных - MySQL, использующая соединения ODBC, в настоящее время я пишу сценарии для Classic ASP, но нацеливаюсь на обновление до .NET, как только разберусь, как !!! : -)