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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проверка полей бд

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
ridvik
Отправлено: 27 Сентября, 2012 - 11:36:54
Post Id


Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


Добрый день. Столкнулся с такой проблемой. Нужно сделать регистрацию команды на турнир с 2 условиями. Первое реализовал, а вот со вторым беда. Суть такова. При регистрации должна идти проверка на заполненость двух полей у пользователей, которые относятся к этой команде. И если хотя бы у одного не заполены эти поля, то выводились списком игроки и какое(какие) поля не заполнены... Как такое реализовать?? Таблица юзеров состоит примерно так: uid user_name user_teamid user_steam user_ucp последние 2 как раз надо проверить...
 
 Top
Alho
Отправлено: 27 Сентября, 2012 - 11:50:45
Post Id



Посетитель


Покинул форум
Сообщений всего: 322
Дата рег-ции: Апр. 2012  


Помог: 11 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT user_name WHERE user_teamid=$curent_user_teamid AND user_sream=NULL AND user_ucp=NULL


?

(Отредактировано автором: 27 Сентября, 2012 - 11:51:38)

 
 Top
EuGen Администратор
Отправлено: 27 Сентября, 2012 - 13:16:54
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Alho пишет:
SELECT user_name WHERE user_teamid=$curent_user_teamid AND user_sream=NULL AND user_ucp=NULL

Во-первых, не AND, а OR (следуя условиям задачи)
Во-вторых, сравнивать на NULL при помощи равенства бессмысленно (нельзя сравнить конкретное значение и отсутствие значения), поэтому в MySQL предусмотрен оператор IS NULL
В-третьих, нужно не просто выбрать пользователей, у которых что-либо не заполнено, но так же и получить список - у кого и что не заполнено, поэтому, я думаю, будет все же два разных запроса на эта два поля.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
ridvik
Отправлено: 27 Сентября, 2012 - 13:19:37
Post Id


Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


EuGen я вот тоже так думаю, первым сделать user_teamid а уже вторым выбирать пустые значения или нет... но все же как реализовать до конца мне не понятно...
 
 Top
EuGen Администратор
Отправлено: 27 Сентября, 2012 - 13:29:36
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Так в чем вопрос?
Выбрать:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT user_name WHERE user_teamid=$curent_user_teamid AND user_sream IS NULL

- тех, у кого не заполнено первое поле, и
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT user_name WHERE user_teamid=$curent_user_teamid AND user_ucp IS NULL

- тех, у кого не заполнено второе.
Если оба запроса ничего не вернули - значит, все в порядке. Если вернули - то показывать список по каждому полю.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
ridvik
Отправлено: 27 Сентября, 2012 - 13:31:51
Post Id


Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


EuGen вы понимаете что у меня на простую проверку 100500 запросов будет?)
 
 Top
EuGen Администратор
Отправлено: 27 Сентября, 2012 - 13:56:11
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




ridvik
Вы сами так поставили задачу. Если важно избежать запросов, то можно использовать один (связывая условия через OR) - и затем анализировать данные в PHP. Однако следует помнить, что запрос, использующий OR, почти всегда не будет использовать индекс - даже если он построен по релевантным полям. Поэтому, вероятнее всего, следует проверять конкретную запись при внесении, сэкономив тем самым в производительности - ведь тогда данные априори не будут некорректными.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 27 Сентября, 2012 - 14:20:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




EuGen пишет:
почти всегда не будет использовать индекс

Или использовать сразу 2. index_merge, MySQL 5.0 и старше.


-----
PostgreSQL DBA
 
 Top
ridvik
Отправлено: 28 Сентября, 2012 - 18:55:01
Post Id


Частый гость


Покинул форум
Сообщений всего: 244
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


че то я не могу все же разобраться... с запросами понятно как в пхп условиями это сделать?? нужно что то типо этого...

короч нужно сделать ссылку, которая появлялась бы только если в базе данных пользователей с одинаковым user_teamid больше 5 и user_steam и user_ucp не были пустыми у всех... а если хотя бы у одного последние два пользователя не заполнены то выводился список с пользователем и что у него не списано... помогите кодом плиз...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB