Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL-запрос в зависимости от кол-ва найденных записей / 9 сообщений из 9, страница 1 из 1
09.09.2014, 12:32:36
    #38741598
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL-запрос в зависимости от кол-ва найденных записей
Здравствуйте! Возникла такая задача: на странице товара - выводить 4 похожих товара. Эта самая "похожесть" будет определяться так:
1. В первую очередь - проверяем на марку, модель, год.
2. Если ничего нет - проверяем только на марку и модель.
3. Если и сочетания марки и модели нет - проверяем только на марку.

Делаю так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
$result = mysql_query("SELECT prodict_id... WHERE product_mark='$mark' AND product_model='$model' AND product_year='$year' LIMIT 4");
if(mysql_num_rows($result) == 0) { // ничё не нашли - увеличиваем охват поиска
    $result = mysql_query("SELECT prodict_id... WHERE product_mark='$mark' AND product_model='$model' LIMIT 4");
    if(mysql_num_rows($result) == 0) { // опять ничё не нашли - ещё больше увеличиваем охват поиска
        $result = mysql_query("SELECT prodict_id... WHERE product_mark='$mark'' LIMIT 4");
        // ну и тут выводим лишь товары с одинаковыми марками. Если конечно они вообще есть...
    }
}



Работает-то оно работает, но блин сам подход дебильный. Индия какая-то... Тем более, если у меня будет не 3 а штук 7 параметров совпадения - это кучу вложенных условий придётся лепить.
Есть какие идеи?
...
Рейтинг: 0 / 0
09.09.2014, 12:40:21
    #38741612
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL-запрос в зависимости от кол-ва найденных записей
Можно попробовать так
Код: sql
1.
2.
3.
SELECT prodict_id... 
WHERE product_mark='$mark' 
order by (product_model='$model') desc, (product_year='$year') desc LIMIT 4

, но будет ли это лучше по скорости, даже учитывая, что это один селект вместо трёх - большой вопрос.
...
Рейтинг: 0 / 0
09.09.2014, 13:00:54
    #38741650
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL-запрос в зависимости от кол-ва найденных записей
tanglir,

Ммм, а вы думаете что в вашем примере - мускул сам остановится при 1-м же нахождении не нулевого результата и выдаст мне максимальный? Ну всмысле, если будет хоть 1 совпадение по МАРКА+МОДЕЛЬ - он тут же их мне выпленет, и не станет искать только по марке?
...
Рейтинг: 0 / 0
09.09.2014, 13:40:16
    #38741716
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL-запрос в зависимости от кол-ва найденных записей
iova1984выводить 4 похожих товара. Эта самая "похожесть" будет определяться так:
1. В первую очередь - проверяем на марку, модель, год.
2. Если ничего нет - проверяем только на марку и модель.
3. Если и сочетания марки и модели нет - проверяем только на марку.

Делаю так:
Если по первому пункту будет 2 совпадения - то у тебя 2 и выведется, хотя по смыслу сказанного надо бы ещё добавить 2 совпадающих по второму пункту... или нет? если да - то надо корректировать LIMIT в текстах запросов второго-третьего пунктов.

Но вообще идея правильная - вот только её реализация так себе. Надо наборы критериев по пунктам слить в массив и в цикле обрабатывать, пока не наберётся необходимое для вывода количество записей или пока список наборов критериев не кончится. Тогда пофиг будет, три набора критериев или семь... и да - вынести всё это на сервер в форме хранимой процедуры, неча на клиенте держать бизнес-логику.

Один же запрос с сортировками на более-менее приличной таблице - это тормозилово будет, к гадалке не ходи.
...
Рейтинг: 0 / 0
09.09.2014, 15:56:57
    #38741917
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL-запрос в зависимости от кол-ва найденных записей
iova1984Есть какие идеи?

поскольку таблица товаров обновляется редко, а запросов с рендером рекомендаций <очень много>, то мы в таких случаях пишем кнопку для контент-менеджера и когда она поработала с каталогом, то нажав её отдельной обработкой проходимся по всей таблице и заполняем поле рекомендаций, куда вставляем список идентификаторов рекомендуемых товаров

это решение позволяет существенно экономить вычислительные ресурсы, увеличивает скорость и при этом остается гибкость изменения правил рекомендации - просто нажать кнопку пересчета по всей базе и готово, код рендера при этом не трогается вообще
...
Рейтинг: 0 / 0
10.09.2014, 07:04:32
    #38742391
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL-запрос в зависимости от кол-ва найденных записей
iova1984а вы думаете что в вашем примере - мускул сам остановится при 1-м же нахождении не нулевого результата и выдаст мне максимальный?нет, потому и написал, что скорости ждать не придётся
...
Рейтинг: 0 / 0
10.09.2014, 09:43:54
    #38742473
iova1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL-запрос в зависимости от кол-ва найденных записей
Lumixiova1984Есть какие идеи?

поскольку таблица товаров обновляется редко, а запросов с рендером рекомендаций <очень много>, то мы в таких случаях пишем кнопку для контент-менеджера и когда она поработала с каталогом, то нажав её отдельной обработкой проходимся по всей таблице и заполняем поле рекомендаций, куда вставляем список идентификаторов рекомендуемых товаров

это решение позволяет существенно экономить вычислительные ресурсы, увеличивает скорость и при этом остается гибкость изменения правил рекомендации - просто нажать кнопку пересчета по всей базе и готово, код рендера при этом не трогается вообще

Обновляется как раз часто - пуд товарами подразумеваются автомобили. Доска объявлений по продаже авто. До 300 объявлений в сутки добавляется, примерно столько же удаляется.
...
Рейтинг: 0 / 0
10.09.2014, 12:13:54
    #38742696
Ivan Durak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL-запрос в зависимости от кол-ва найденных записей
iova1984tanglir,

Ммм, а вы думаете что в вашем примере - мускул сам остановится при 1-м же нахождении не нулевого результата и выдаст мне максимальный? Ну всмысле, если будет хоть 1 совпадение по МАРКА+МОДЕЛЬ - он тут же их мне выпленет, и не станет искать только по марке?
нет конечно. Ты попробуй, да
...
Рейтинг: 0 / 0
10.09.2014, 13:17:00
    #38742826
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL-запрос в зависимости от кол-ва найденных записей
iova1984Обновляется как раз часто - пуд товарами подразумеваются автомобили. Доска объявлений по продаже авто. До 300 объявлений в сутки добавляется, примерно столько же удаляется.

300 обновлений в сутки это редко
потому что показов с рекомендациями происходит 300 в секунду

поэтому такое обновление (перерасчет) можно делать по хрону раз в 15 минут и ничего страшного, что по нескольким новым машинам не будут показываться рекомендации в течение 5-10 минут с момента публикации

можно вообще только раз в сутки пересчитывать
за счет отдельных пересчетов порой удается тупо освободить несколько серверов, если речь идет о посещаемом сервисе, а удобство для пользователей остается таким же...
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL-запрос в зависимости от кол-ва найденных записей / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]