2017-01-07 3 views
-2

У меня есть таблица, где содержатся детали пользователя. Теперь нужно выполнить запрос MySQL, который удовлетворяет приведенные ниже условия:Запрос MySQL с проверкой условий

Есть две таблиц

1) пользователь столовой - который содержит идентификатор пользователя, имя, Firstname

2) Категория стол - который containts CategoryID, категория типа, assinged USERID

Теперь я хочу, чтобы выполнить запрос, который удовлетворяет условию НИЖЕ

Пользователь может видеть только категорию с простым, сложным и предназначенным только для своего идентификатора пользователя, и эта категория не должна назначаться никому другому идентификатору пользователя.

Любой, пожалуйста, помогите мне в этом.

+0

Делитесь своим кодом здесь. –

+0

Можете ли вы дать нам образцы данных и ожидаемый результат? – Philipp

+0

Что вы подразумеваете под категорией «*, не должны присваиваться никакому другому идентификатору пользователя *»? – GurV

ответ

2
drop table if exists category; 
create table category (id int, categorytype varchar(10), assignedUserId int); 

truncate table category; 
insert into category values 
(1,'simple',1), 
(2,'complex',1), 
(3,'simple',2), 
(4,'complex',3), 
(5,'odd',1); 


MariaDB [sandbox]> select * from users where id < 6; 
+----+----------+----------+--------+---------------------+ 
| id | userName | photo | status | ts     | 
+----+----------+----------+--------+---------------------+ 
| 1 | John  | john.png |  1 | 2016-12-08 13:14:24 | 
| 2 | Jane  | jane.png |  1 | 2016-12-08 13:14:24 | 
| 3 | Ali  |   |  1 | 2016-12-08 13:14:24 | 
+----+----------+----------+--------+---------------------+ 
3 rows in set (0.00 sec) 

MariaDB [sandbox]> 
MariaDB [sandbox]> select u.*, c.* 
    -> from users u 
    -> join category c on c.assigneduserid = u.id 
    -> where u.id = 1 
    -> and c.categorytype not in (select c.categorytype from category c where c.assigneduserid <> 1); 
+----+----------+----------+--------+---------------------+------+--------------+----------------+ 
| id | userName | photo | status | ts     | id | categorytype | assignedUserId | 
+----+----------+----------+--------+---------------------+------+--------------+----------------+ 
| 1 | John  | john.png |  1 | 2016-12-08 13:14:24 | 5 | odd   |    1 | 
+----+----------+----------+--------+---------------------+------+--------------+----------------+ 
1 row in set (0.00 sec) 
0
SELECT * FROM categories 
WHERE category_type = 'simple' OR 
     category_type = 'complex' AND // (edited after comment of Philipp) 
     assinged_userid = (Your User ID Here) 
+2

Нет. Вы должны комбинировать условие user_id с помощью 'AND' с условием category_types. '(category_type = simple 'OR category_type =' complex ') AND user_id = ...' – Philipp

+0

Вы правы, моя ошибка – Nevo

+0

Мне нужно получить категории, которые были назначены только моему идентификатору пользователя. Мне не нужны категории, которые были назначены другим пользователям. –

1

Попробуйте это:

SELECT * 
FROM category c 
where userid = 123 
and not exists (
    select 1 
    from category c2 
    where c.userid <> c2.userid 
    and c.categorytype = c2.categorytype 
); 

Обратите внимание, что этот запрос не требует идентификатора быть упомянутым в двух местах, в отличии от других ответов, и, следовательно, является более общим.

Смежные вопросы