- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть 2 таблицы "пользователи", "товар".
Структура:
Пользователи - id|name
Товар - id|user_id|type|name
"type" - 1 или 0
Цель:
Нужно вывести всех пользователй у которых есть записи только одного типа, 1 или 0.
select * from пользователи where id = ALL( select user_id from Товар where type=1)
select * from пользователи where id = ALL( select user_id from Товар where type=1)
Наверное уточню.
Вывести пользователей у которых есть товар ТОЛЬКО одного типа
т.е. есть с типом 1 но нет с типом 0
Попробуйте так...
SELECT u.* FROM users INNER JOIN items as i on u.id=i.user_id WHERE i.type=0
Может где в синтаксисе ошибся, нет базы проверить под рукой
select u.id, count(t1.id) as t1_count, count(t0.id) as t0_count
from users u
left join tovar t1 on t1.user_id = u.id and t1.type = 1
left join tovar t0 on t0.user_id = u.id and t0.type = 0
group by u.id
having (t1_count > 0 and t0_count == 0) or (t0_count > 0 and t1_count == 0)
вот так. НО если у вас будет монго юзеров и товаров то на это запросе mysql будет загинатся.
ИМХО если у вас тупо 2-а тайпа - добавте два флага в таблицу юзеров type_1 and type_2 и устанавливайте их при редактировании. Тогда запрос упростится в разы
select u.id, count(t1.id) as t1_count, count(t0.id) as t0_count
from users u
left join tovar t1 on t1.user_id = u.id and t1.type = 1
left join tovar t0 on t0.user_id = u.id and t0.type = 0
group by u.id
having (t1_count > 0 and t0_count == 0) or (t0_count > 0 and t1_count == 0)
вот так. НО если у вас будет монго юзеров и товаров то на это запросе mysql будет загинатся.
ИМХО если у вас тупо 2-а тайпа - добавте два флага в таблицу юзеров type_1 and type_2 и устанавливайте их при редактировании. Тогда запрос упростится в разы
Спасибо.
Этот вариант больше похож на правду. Запрос не часто будет использоваться и только одним пользователем.