Size: a a a

2021 August 20

T

Talant in MySQL
Я предполагаю что здесь ошибка и спросил как можно это исправить чтобы сразу можно было сравнить значения двух полей.
источник

V

Vova in MySQL
Надо чтоб значение было или 1 или 16?
источник

T

Talant in MySQL
Есть таблица назовём user_data с полями id, user_id, field_id, field_value  где field_id может быть равен 1 также 16 а value у них соответственно разные. Мне нужно написать такой запрос: Получить user_id где (field_id = 1 field_value ='text') и (field_id = 16 с field_value = 54).
источник

V

Vova in MySQL
(field_id = 1 and field_value ='text') or (field_id = 16 and field_value = 54)
источник

T

Talant in MySQL
В таком случае ищет либо по первому значению либо по второму а мне нужно чтобы сразу по двум.
источник

V

Vova in MySQL
а в одной строке может быть сразу два значения field_id?
источник

T

Talant in MySQL
Таблица выглядит так
источник

V

Vova in MySQL
а моё решение что возвращает?
источник

OT

One Two in MySQL
а два запроса тебя не устроят?
источник

OT

One Two in MySQL
вроде тут они как раз ложатся на необходимое
источник

T

Talant in MySQL
Нужно одним запросом получить  user_id.  Думаю что есть решение но не могу найти.
источник

OM

Oleg Makarikhin in MySQL
обожемой, это EAV.
не тестировал, но запросы надо делалть что то типа
SELECT user_id FROM user_data f1
join  user_data f16 on f1.user_id  = f16.user_id  AND ( f6.field_id = 16 AND f16.VALUE = 54)
WHERE ( f1.field_id = 1 AND f1.VALUE LIKE 'Expert')

короче каждое свойство надо брать из отдельной таблицы, тоесть по алиасу.
источник

V

Vova in MySQL
сгруппировать str_agg и выбрать юзерайди у которых str_agg like (1,16)
источник

T

Talant in MySQL
Спасибо попробую.    SELECT user_id  FROM user_data  WHERE  (field_id, value)  IN  ( ( '1', 'Expert') , ('16','54') )  такой вариант работает.  Но как ту т использовать LIKE?
источник

V

Vova in MySQL
тогда и OR работает - это одно и тоже
источник

OM

Oleg Makarikhin in MySQL
VALUE LIKE 'Expert' тут нет подстановочных символов,
источник

OM

Oleg Makarikhin in MySQL
но если и  были бы, к плоским горизонтаьлным таблицам можно применить фильтры  с помощью одного запроса на свойства, потому что у одной сущности одна запись , но у вас вертикальная таблица, на одного юзера несколько записей, и поэтому вам надо каждое свойство вытягивать отдельным запросом
источник

OT

One Two in MySQL
два предельно простых запроса и усё, или препод двойку поставит? ))
источник

OM

Oleg Makarikhin in MySQL
чисто интересно, сколько разнообразных пользователей и сколько записей в таблице?
select count(1) from user_data;
select count(user_id) from user_data group by user_id;
источник

T

Talant in MySQL
Препод двойку не поставит но хотелось бы одним запросом.  Если никак то придется писать 2.
источник