@Billy_Milligan

Как составить запрос с необязательным выполнение условия?

Например есть таблица tFilm с полями name, country, genre, year.

Как составить запрос так что бы получить 10 фильмов.

SELECT * FROM `tFilm` WHERE `country`='34' AND `genre` = '4' AND `year` = '1998' LIMIT 10;


Допустим по данным параметрам подходит 5 фильмов.
Можно ли составить запрос так что бы не учитывать например year и т.д, для того что бы получить в итоге 10 фильмов по максимально подходящим параметрам?

Или придется делать несколько запросов?
  • Вопрос задан
  • 955 просмотров
Решения вопроса 3
@liveinskydreams
Программист 1С, системный администратор Win, nix
Технически осуществимо, но нагрузка на сервер не обоснована.
Временные таблицы + куча Join-ов. Не стоит оно того

А вообще необязательно выполнение условия это:
Where
     (nekoe_uslovie) or 1=1

Само по себе выражение лишено смысла.

Условие оно на то и условие, чтобы мы всегда знали выполнилось оно или нет. Ну булево же не с проста...

Хотя я вас обманул похоже...
Можно решить и без множества запросов..
Попробуйте, вроде то, что вам нужно

select
   case country when '34' then 1 else 0 end as sort1,
   case genre when '4' then 1 else 0 end as sort2,
   case year when '1998' then 1 else 0 end as sort3,
   country,
   genre,
   year
from
   'tfilm'
sort by sort1, sort2, sort3
limit 10
Ответ написан
Комментировать
27cm
@27cm
TODO: Написать статус
(SELECT * FROM `tFilm` WHERE `country`='34' AND `genre` = '4' AND `year` = '1998')
UNION DISTINCT
(SELECT * FROM `tFilm` WHERE `country`='34' AND `genre` = '4')
UNION DISTINCT
(SELECT * FROM `tFilm` WHERE `country`='34')
UNION DISTINCT
(SELECT * FROM `tFilm`)
LIMIT 10
Ответ написан
orlov0562
@orlov0562
I'm cool!
Еще вариант:

select * from `tFilm`
order by 
	case when `year` = '1998' then 1 else 2 end, 
	case when `genre` = '4' then 1 else 2 end, 
	case when `country` = '34' then 1 else 2 end, 
	year,
	genre,
	country
limit 10
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
talgatbaltasov
@talgatbaltasov
Freelancer
Ну полюбому же надо несколько запросов, так как в начале мы не знаем сколько таких записей, если меньше то в след. запросе убираем year, если и тут меньше 10 то еще что то убираем
Ответ написан
Комментировать
@AlikDex
что мешает использовать диапазон некоторых параметров? например
`year`<='1998'
OREDER BY `your_params`, `year`


50к записей это очень мало.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы