Size: a a a

2020 December 30

РА

Ринат А in MySQL
🇻 🇱 🇦 🇩
уберите лишние индексы которые вы насоздовали
Эти два имеет ввиду?
источник

IZ

Ilia Zviagin in MySQL
Ринат А
SELECT DISTINCT t1.film_id, t5.date, t5.time, t5.id, t5.img, t5.title as title_orig, t5.rating_kp, t5.vote_kp, t5.vote_imdb, t5.rating_imdb, t6.title, t6.description FROM entities_to_film as t1 JOIN entities_to_film as t3 ON t1.film_id = t3.film_id and (t3.entity_id = 3 and t3.entity = 25) JOIN films as t5 ON t1.film_id = t5.id JOIN films_lang as t6 on t1.film_id = t6.film_id ORDER BY t5.rating_kp DESC LIMIT 5 OFFSET 0;
Ну вот твой запрос.

SELECT DISTINCT 
 t3.film_id, t5.date, t5.time, t5.id, t5.img, t5.title as title_orig, t5.rating_kp,
 t5.vote_kp, t5.vote_imdb, t5.rating_imdb, t6.title, t6.description
FROM entities_to_film as t3
JOIN entities_to_film as t1 ON t1.film_id = t3.film_id
JOIN films as t5 ON t3.film_id = t5.id
JOIN films_lang as t6 on t3.film_id = t6.film_id
WHERE t3.entity_id = 3
 and t3.entity = 25
ORDER BY t5.rating_kp DESC
LIMIT 5 OFFSET 0;


Ну это ж бред какой-то а не запрос...
Зачем тебе

JOIN entities_to_film as t1 ON t1.film_id = t3.film_id
?
источник

S

Syntax Highlight Bot in MySQL
Ilia Zviagin
Ну вот твой запрос.

SELECT DISTINCT 
 t3.film_id, t5.date, t5.time, t5.id, t5.img, t5.title as title_orig, t5.rating_kp,
 t5.vote_kp, t5.vote_imdb, t5.rating_imdb, t6.title, t6.description
FROM entities_to_film as t3
JOIN entities_to_film as t1 ON t1.film_id = t3.film_id
JOIN films as t5 ON t3.film_id = t5.id
JOIN films_lang as t6 on t3.film_id = t6.film_id
WHERE t3.entity_id = 3
 and t3.entity = 25
ORDER BY t5.rating_kp DESC
LIMIT 5 OFFSET 0;


Ну это ж бред какой-то а не запрос...
Зачем тебе

JOIN entities_to_film as t1 ON t1.film_id = t3.film_id
?
источник

IZ

Ilia Zviagin in MySQL
Ринат А
Эти два имеет ввиду?
Напиши сначала запрос нормальный, ХОТЯ БЫ ЛОГИЧ|Е|СКИ ВРАЗУМИТЕЛЬНЫЙ,
потом уже оптимизируй.
источник

РА

Ринат А in MySQL
Ilia Zviagin
SELECT t1.film_id
FROM entities_to_film as t1
JOIN entities_to_film as t2 ON t1.film_id = t2.film_id and (t2.entity_id = 8 and t2.entity = 23330)
JOIN entities_to_film as t3 on t2.film_id = t3.film_id and (t3.entity_id = 3 and t3.entity = 1)
JOIN entities_to_film as t4 on t3.film_id = t4.film_id and (t4.entity_id = 4 and t4.entity = 3)
JOIN films as t5 on t4.film_id = t5.id
WHERE (t1.entity_id = 10 and t1.entity = 7836) and t5.date = 2003;


На каждую таблицу нужен индекс (entity_id, entity, film_id)
и ещё на date
Просто t2/t3/t4 не всегда будут присутствовать в запросе, а t1 всегда.  ПОэтому к нему и приравниваю.
источник

РА

Ринат А in MySQL
Ваш кусок кода
источник

IZ

Ilia Zviagin in MySQL
Ринат А
Просто t2/t3/t4 не всегда будут присутствовать в запросе, а t1 всегда.  ПОэтому к нему и приравниваю.
Вот твой запрос, написанный как надо.

SELECT  
 t5.id as film_id, t5.date, t5.time, t5.id, t5.img, t5.title as title_orig, t5.rating_kp,
 t5.vote_kp, t5.vote_imdb, t5.rating_imdb, t6.title, t6.description
FROM films as t5
-- JOIN entities_to_film as t1 ON t1.film_id = t3.film_id
JOIN films_lang as t6 on t5.id = t6.film_id
where exists ( select * from entities_to_film as t3  
WHERE t3.film_id = t5.id
 and t3.entity_id = 3
 and t3.entity = 25
)
ORDER BY t5.rating_kp DESC, t6.lang_code
LIMIT 5 OFFSET 0;


И то идиотизм — если надо TOP 5 по рейтингу, то НЕЛЬЗЯ JOIN-ить языки-переводы — не получится рейтинга.

Надо сначала получить рейтинг, а лишь потом JOIN-ить его с переводами.
источник

S

Syntax Highlight Bot in MySQL
Ilia Zviagin
Вот твой запрос, написанный как надо.

SELECT  
 t5.id as film_id, t5.date, t5.time, t5.id, t5.img, t5.title as title_orig, t5.rating_kp,
 t5.vote_kp, t5.vote_imdb, t5.rating_imdb, t6.title, t6.description
FROM films as t5
-- JOIN entities_to_film as t1 ON t1.film_id = t3.film_id
JOIN films_lang as t6 on t5.id = t6.film_id
where exists ( select * from entities_to_film as t3  
WHERE t3.film_id = t5.id
 and t3.entity_id = 3
 and t3.entity = 25
)
ORDER BY t5.rating_kp DESC, t6.lang_code
LIMIT 5 OFFSET 0;


И то идиотизм — если надо TOP 5 по рейтингу, то НЕЛЬЗЯ JOIN-ить языки-переводы — не получится рейтинга.

Надо сначала получить рейтинг, а лишь потом JOIN-ить его с переводами.
источник

РА

Ринат А in MySQL
Ilia Zviagin
Вот твой запрос, написанный как надо.

SELECT  
 t5.id as film_id, t5.date, t5.time, t5.id, t5.img, t5.title as title_orig, t5.rating_kp,
 t5.vote_kp, t5.vote_imdb, t5.rating_imdb, t6.title, t6.description
FROM films as t5
-- JOIN entities_to_film as t1 ON t1.film_id = t3.film_id
JOIN films_lang as t6 on t5.id = t6.film_id
where exists ( select * from entities_to_film as t3  
WHERE t3.film_id = t5.id
 and t3.entity_id = 3
 and t3.entity = 25
)
ORDER BY t5.rating_kp DESC, t6.lang_code
LIMIT 5 OFFSET 0;


И то идиотизм — если надо TOP 5 по рейтингу, то НЕЛЬЗЯ JOIN-ить языки-переводы — не получится рейтинга.

Надо сначала получить рейтинг, а лишь потом JOIN-ить его с переводами.
Не так все просто. Не зря там OFFSET стоит, он меняется.
И еще, мне сперва нужно найти фильмы по фильтру: жанр, актер/ы, либо режиссер, актер, страна, либо просто страна, либо страна жанр, любое сочетание может быть, сделать выборку этих фильмов и отсортировать по рейтингу и вывести первые 5, либо вторые 5, зависит от offset
источник

IZ

Ilia Zviagin in MySQL
Ринат А
Просто t2/t3/t4 не всегда будут присутствовать в запросе, а t1 всегда.  ПОэтому к нему и приравниваю.
ВОт целый запрос в конечном виде
SELECT  
 t5.id as film_id, t5.date, t5.time, t5.id, t5.img, t5.title as title_orig, t5.rating_kp,
 t5.vote_kp, t5.vote_imdb, t5.rating_imdb, t6.title, t6.description
from (
select t5.*
FROM films as t5
where exists ( select * from entities_to_film as t3  
WHERE t3.film_id = t5.id
 and t3.entity_id = 3
 and t3.entity = 25
)
ORDER BY t5.rating_kp DESC LIMIT 5
) as t5
JOIN films_lang as t6 on t5.id = t6.film_id
источник

S

Syntax Highlight Bot in MySQL
Ilia Zviagin
ВОт целый запрос в конечном виде
SELECT  
 t5.id as film_id, t5.date, t5.time, t5.id, t5.img, t5.title as title_orig, t5.rating_kp,
 t5.vote_kp, t5.vote_imdb, t5.rating_imdb, t6.title, t6.description
from (
select t5.*
FROM films as t5
where exists ( select * from entities_to_film as t3  
WHERE t3.film_id = t5.id
 and t3.entity_id = 3
 and t3.entity = 25
)
ORDER BY t5.rating_kp DESC LIMIT 5
) as t5
JOIN films_lang as t6 on t5.id = t6.film_id
источник

IZ

Ilia Zviagin in MySQL
Ринат А
Не так все просто. Не зря там OFFSET стоит, он меняется.
И еще, мне сперва нужно найти фильмы по фильтру: жанр, актер/ы, либо режиссер, актер, страна, либо просто страна, либо страна жанр, любое сочетание может быть, сделать выборку этих фильмов и отсортировать по рейтингу и вывести первые 5, либо вторые 5, зависит от offset
Я не могу обсуждать запросы из твоих фантазий.
Какой дали , с тем и работаю.
источник

РА

Ринат А in MySQL
Ilia Zviagin
Я не могу обсуждать запросы из твоих фантазий.
Какой дали , с тем и работаю.
Я понимаю, поэтому я и делаю общий запрос, который бы подходил под ситуацию. JOIN в этом плане самый просто вариант.
источник

РА

Ринат А in MySQL
Ilia Zviagin
ВОт целый запрос в конечном виде
SELECT  
 t5.id as film_id, t5.date, t5.time, t5.id, t5.img, t5.title as title_orig, t5.rating_kp,
 t5.vote_kp, t5.vote_imdb, t5.rating_imdb, t6.title, t6.description
from (
select t5.*
FROM films as t5
where exists ( select * from entities_to_film as t3  
WHERE t3.film_id = t5.id
 and t3.entity_id = 3
 and t3.entity = 25
)
ORDER BY t5.rating_kp DESC LIMIT 5
) as t5
JOIN films_lang as t6 on t5.id = t6.film_id
Благодарю, шустро работает.
источник

G

Grigorij in MySQL
О, знакомые люди оптимизируются. Всё проспал.
источник

🇻

🇻 🇱 🇦 🇩 in MySQL
Ринат А
Я понимаю, поэтому я и делаю общий запрос, который бы подходил под ситуацию. JOIN в этом плане самый просто вариант.
версия mysql какая?
источник

РА

Ринат А in MySQL
🇻 🇱 🇦 🇩
версия mysql какая?
Ver 15.1 Distrib 10.1.47-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
источник

🇻

🇻 🇱 🇦 🇩 in MySQL
Ринат А
Ver 15.1 Distrib 10.1.47-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
зачем в запросе join на эту же таблицу?
источник

РА

Ринат А in MySQL
🇻 🇱 🇦 🇩
зачем в запросе join на эту же таблицу?
чтоб по отдельности искало.
Если объеденить, то ничего не найдет
источник

DE

Denis Efremov in MySQL
В вас спорят дистинктист, джойнист и подзапросник, профессор...
источник