Size: a a a

Nuxt.js | Vue SSR

2021 March 08

СК

Сергей Rekry† Крупки... in Nuxt.js | Vue SSR
SELECT i.*, t.name as tags_name
FROM items_tags it
LEFT JOIN items i ON i.id = it.items_id
LEFT JOIN tags t ON t.id = it.tags_id
WHERE it.tags_id IN (
 SELECT tags_id
 FROM items_tags
 WHERE items_id = "${addslashes($id)}"
)
AND i.state = 1
AND t.state = 1
источник

Д

Деда in Nuxt.js | Vue SSR
Сергей Rekry† Крупкин
SELECT i.*, t.name as tags_name
FROM items_tags it
LEFT JOIN items i ON i.id = it.items_id
LEFT JOIN tags t ON t.id = it.tags_id
WHERE it.tags_id IN (
 SELECT tags_id
 FROM items_tags
 WHERE items_id = "${addslashes($id)}"
)
AND i.state = 1
AND t.state = 1
В два запроса
источник

ВК

Владимир Карпов... in Nuxt.js | Vue SSR
А где тут фронт ?
источник

ВК

Владимир Карпов... in Nuxt.js | Vue SSR
Я слышал что-то про характеристики и аксессуары
источник

ВК

Владимир Карпов... in Nuxt.js | Vue SSR
Тип  у товаров с теми же аксессуарами будут похожие или сета тип того
источник

СР

Сергей Рыжков... in Nuxt.js | Vue SSR
Сергей Rekry† Крупкин
SELECT i.*, t.name as tags_name
FROM items_tags it
LEFT JOIN items i ON i.id = it.items_id
LEFT JOIN tags t ON t.id = it.tags_id
WHERE it.tags_id IN (
 SELECT tags_id
 FROM items_tags
 WHERE items_id = "${addslashes($id)}"
)
AND i.state = 1
AND t.state = 1
Мелочь, но вместо IN кошернее EXISTS
источник

СК

Сергей Rekry† Крупки... in Nuxt.js | Vue SSR
Сергей Рыжков
Мелочь, но вместо IN кошернее EXISTS
WHERE EXISTS(
 SELECT tags_id
 FROM items_tags
 WHERE it.tags_id = tags_id AND items_id = "${addslashes($id)}"
)

так получается?
источник

СР

Сергей Рыжков... in Nuxt.js | Vue SSR
Кстати, пару лет назад делали  сайт аукциона недвижки. По анализу трафика, оказалось, что переходы в разделах Вв также можете посмотреть (где похожие) оказалась на много выше, когда выводились объекты динамически, в зависимости от параметров фильтра, которые юзер указал для поиска
источник

СР

Сергей Рыжков... in Nuxt.js | Vue SSR
Сергей Rekry† Крупкин
WHERE EXISTS(
 SELECT tags_id
 FROM items_tags
 WHERE it.tags_id = tags_id AND items_id = "${addslashes($id)}"
)

так получается?
Вроде так (трудно без консоли точно сказать), но смысл верен. Надо планы запросов смотреть, возможно, оптимальнее будет сделать вообще select from select (потом джойнить)
источник

СК

Сергей Rekry† Крупки... in Nuxt.js | Vue SSR
Сергей Рыжков
Кстати, пару лет назад делали  сайт аукциона недвижки. По анализу трафика, оказалось, что переходы в разделах Вв также можете посмотреть (где похожие) оказалась на много выше, когда выводились объекты динамически, в зависимости от параметров фильтра, которые юзер указал для поиска
помню делал похожее, когда для каждого результата поиска определяется вес исходя из больше чем 15 критериев (полное вхождение слова, вхождение в начало слова, частичное вхождение, для 2х слов тоже самое и прочее)
источник

СК

Сергей Rekry† Крупки... in Nuxt.js | Vue SSR
Сергей Рыжков
Вроде так (трудно без консоли точно сказать), но смысл верен. Надо планы запросов смотреть, возможно, оптимальнее будет сделать вообще select from select (потом джойнить)
мне кажется, что в первом варианте у нас хоть и 2 запроса, но мы получили список тагов товара и сразу получаем список товаров этих тагов
в варианте с EXISTS подзапрос для каждой записи товара будет разным и интуитивно есть подозрения, что может работать медленнее, мягко говоря
думаю EXISTS это на случай, когда мы фильтруем по принципу того, что нам достаточно чтобы справа оператора была хотя бы одна запись (чтобы не искать все записи)
источник

СР

Сергей Рыжков... in Nuxt.js | Vue SSR
Сергей Rekry† Крупкин
мне кажется, что в первом варианте у нас хоть и 2 запроса, но мы получили список тагов товара и сразу получаем список товаров этих тагов
в варианте с EXISTS подзапрос для каждой записи товара будет разным и интуитивно есть подозрения, что может работать медленнее, мягко говоря
думаю EXISTS это на случай, когда мы фильтруем по принципу того, что нам достаточно чтобы справа оператора была хотя бы одна запись (чтобы не искать все записи)
Результат IN и EXISTS будет один. Но я с тобой согласен, способ достижения результата (скорость) может очень сильно разниться, при чем на одной и той же структуре, но при разных данных и настроек СУБД. Так что, надо смотреть в каждом случае, если это вообще критично (микрооптимизация не всегда хорошо)
источник

Д

Деда in Nuxt.js | Vue SSR
Сергей Rekry† Крупкин
WHERE EXISTS(
 SELECT tags_id
 FROM items_tags
 WHERE it.tags_id = tags_id AND items_id = "${addslashes($id)}"
)

так получается?
Нет, на каждую запись выполнится этот подзапрос
источник

СК

Сергей Rekry† Крупки... in Nuxt.js | Vue SSR
Деда
Нет, на каждую запись выполнится этот подзапрос
ага, получится N+1 запросов, а с обычным subquery получится 2 запроса
источник

Д

Деда in Nuxt.js | Vue SSR
SELECT i.*, t.name as tags_name
FROM items_tags it
LEFT JOIN items i ON i.id = it.items_id
LEFT JOIN tags t ON t.id = it.tags_id
WHERE it.tags_id IN (
 SELECT tags_id
 FROM items_tags
 WHERE items_id = "${addslashes($id)}"
)
AND i.state = 1
AND t.state = 1
источник

Д

Деда in Nuxt.js | Vue SSR
SELECT tags_id
 FROM items_tags
 WHERE items_id = "${addslashes($id)}"

Первый
источник

Д

Деда in Nuxt.js | Vue SSR
SELECT i.*, t.name as tags_name
FROM items_tags it
LEFT JOIN items i ON i.id = it.items_id
LEFT JOIN tags t ON t.id = it.tags_id
WHERE it.tags_id IN (.....)
AND i.state = 1
AND t.state = 1
источник

СК

Сергей Rekry† Крупки... in Nuxt.js | Vue SSR
Вот если нам надо например получить таги к которым отнесены товары, тогда EXISTS подойдёт (если inner join или distinct не использовать)
SELECT i.*, t.name as tags_name
FROM tags t
WHERE EXISTS (
 SELECT tags_id
 FROM items_tags
 WHERE tags_id = t.id
)
AND t.state = 1
источник

AD

Aleksandr Dergunov in Nuxt.js | Vue SSR
Mongoose на вас не хватает
источник

СР

Сергей Рыжков... in Nuxt.js | Vue SSR
Деда
Нет, на каждую запись выполнится этот подзапрос
А при IN нет?
источник