Size: a a a

🐘PHPStorm TIPS & TRICKS

2020 July 06

NK

Nastya Kizza in 🐘PHPStorm TIPS & TRICKS
Aleksandr baltazor
в items_meta для одного items может быть не сколько записей?
о да
источник

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
по сути:
select * from items i join items_meta im on i.id = im.items_id where (im.key = X and im.value = Y) or (im.key = Z and im.value = W)
источник

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
если я правильно задачу понял
источник

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
можно по другому
источник

NK

Nastya Kizza in 🐘PHPStorm TIPS & TRICKS
Aleksandr baltazor
по сути:
select * from items i join items_meta im on i.id = im.items_id where (im.key = X and im.value = Y) or (im.key = Z and im.value = W)
не, не совсем. у вас выберутся items, для которых есть одна из записей. ну типа либо есть ключ Х, либо ключ Z
источник

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
select * from items where exist(select item_id from items_meta where key = X and value = Y) and exist (select item_id from items_meta where key = Y and value = W)
источник

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
как то так
источник

NK

Nastya Kizza in 🐘PHPStorm TIPS & TRICKS
а надо чтобы проверялось наличие обоих ключей
источник

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
выше вроде проверяет оба ключа )
источник

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
ну вообще интересная практика 🙂
источник

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
а как же поле json ? 😄
источник

СК

Станислав Квятковски... in 🐘PHPStorm TIPS & TRICKS
Nastya Kizza
ребятюни, подскажите плз. допустим, есть таблица items, и есть таблица items_meta с колонками item_id, key, value. надо выбрать такие items, которые имеют записи в items_meta, например что для записи существует meta key=key1 and value=value1 и существует запись key=key2 and value=value2 (обязательно надо несколько условий)
Оч фиговый, однако, всё же, пособ:
SELECT ...
FROM
 ...
 items
 JOIN (
   SELECT
     item_id,
     GROUP_CONCAT(CONCAT_WS('=', key, value) SEPARATOR ';')
   FROM items_meta
 ) AS grouped_meta
 ON
   items.id = item_id
   AND LOCATE('key1=value1', grouped_meta)
   AND LOCATE('key2=value2', grouped_meta)
источник

NK

Nastya Kizza in 🐘PHPStorm TIPS & TRICKS
Aleksandr baltazor
select * from items where exist(select item_id from items_meta where key = X and value = Y) and exist (select item_id from items_meta where key = Y and value = W)
спасибо, тоже вариант
источник

СК

Станислав Квятковски... in 🐘PHPStorm TIPS & TRICKS
Только обрамление значений какое-нибудь добавить
источник

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
Станислав Квятковский
Оч фиговый, однако, всё же, пособ:
SELECT ...
FROM
 ...
 items
 JOIN (
   SELECT
     item_id,
     GROUP_CONCAT(CONCAT_WS('=', key, value) SEPARATOR ';')
   FROM items_meta
 ) AS grouped_meta
 ON
   items.id = item_id
   AND LOCATE('key1=value1', grouped_meta)
   AND LOCATE('key2=value2', grouped_meta)
ток тут есть нюанс, key = key1 and value = value1 то же самое и для 2
источник

NK

Nastya Kizza in 🐘PHPStorm TIPS & TRICKS
Станислав Квятковский
Оч фиговый, однако, всё же, пособ:
SELECT ...
FROM
 ...
 items
 JOIN (
   SELECT
     item_id,
     GROUP_CONCAT(CONCAT_WS('=', key, value) SEPARATOR ';')
   FROM items_meta
 ) AS grouped_meta
 ON
   items.id = item_id
   AND LOCATE('key1=value1', grouped_meta)
   AND LOCATE('key2=value2', grouped_meta)
locate я вообще не знаю, что такое. посмотрю, спасибо!
источник

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
а у тебя получилось key1=value1 🙂
источник

СК

Станислав Квятковски... in 🐘PHPStorm TIPS & TRICKS
Nastya Kizza
locate я вообще не знаю, что такое. посмотрю, спасибо!
Тот же LOCATE '%...%', только быстрее по бенчмаркам
источник

СК

Станислав Квятковски... in 🐘PHPStorm TIPS & TRICKS
Aleksandr baltazor
а у тебя получилось key1=value1 🙂
Вроде в исходной задачи надо было именно так :3
источник

A

Aleksandr baltazor in 🐘PHPStorm TIPS & TRICKS
key=key1 and value=value1 и существует запись key=key2 and value=value2
источник