Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Составить запрос на выборку
Форумы портала PHP.SU » » Вопросы новичков » Составить запрос на выборку

Страниц (1): [1]
 

1. gheka - 09 Декабря, 2016 - 17:12:30 - перейти к сообщению
Здравствуйте.

Не знаю можно ли составить такой запрос или нет, надеюсь можно.

Есть таблица USER
с полями id, name и role

в поле ROLE записываются набор чисел через запятую (пример 2,5,33,66)


И суть такая нужно составить запрос что бы можно было вывести всех пользователей из таблицы USER где например ROLE не равняется 5

Этот запрос естественно не подходит
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT * FROM `user` WHERE `role`!=5
  3.  


Подскажите можно ли составит такой запрос?
2. Мелкий - 09 Декабря, 2016 - 17:34:19 - перейти к сообщению
Приведите в нормальную форму и будет элементарно.
3. gheka - 09 Декабря, 2016 - 17:40:09 - перейти к сообщению
Мелкий пишет:
Приведите в нормальную форму и будет элементарно.


Честно не понял о чём вы?
4. Мелкий - 09 Декабря, 2016 - 17:51:35 - перейти к сообщению
Нормальная форма - это такой термин в реляционных СУБД.

Попытка записать что-нибудь в одно поле через разделитель приносит только головную боль в дальнейшем.
5. gheka - 09 Декабря, 2016 - 18:03:22 - перейти к сообщению
Мелкий пишет:
Нормальная форма - это такой термин в реляционных СУБД.

Попытка записать что-нибудь в одно поле через разделитель приносит только головную боль в дальнейшем.


Ну даже не знаю, никаких проблем у меня с эти раньше не возникало, делал элементарно.

Получал данные из поля таблицы пример поле USER_ID (6,8,9,5)

PHP:
скопировать код в буфер обмена
  1. //Переводил строку в массив
  2. $array_id = explode ( ',', USER_ID )
  3.  
  4. // И осуществлял поиск
  5. if ( !in_array ( 6, $array_id ) {
  6.    // нет такого значения.
  7. }


но тут такой вариант не совсем подходит
6. gheka - 09 Декабря, 2016 - 21:51:41 - перейти к сообщению
Вообщем нашёл решение сам, выкладываю может кому пригодится.
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT * FROM `user` WHERE FIND_IN_SET(5, role)=0
  3.  


Сразу скажу это не лучший вариант если выборка будет производиться с таблицей с большим количеством строк (записей)

В моём случае записей будет максимум 50-70 поэтому для меня это решение лучше чем создавать дополнительные 2 связующие таблицы.
7. Quest - 10 Декабря, 2016 - 17:57:53 - перейти к сообщению
delete

 

Powered by ExBB FM 1.0 RC1