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 » PHP » Напишите за меня, пожалуйста » Проверка полей бд

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

1. ridvik - 27 Сентября, 2012 - 11:36:54 - перейти к сообщению
Добрый день. Столкнулся с такой проблемой. Нужно сделать регистрацию команды на турнир с 2 условиями. Первое реализовал, а вот со вторым беда. Суть такова. При регистрации должна идти проверка на заполненость двух полей у пользователей, которые относятся к этой команде. И если хотя бы у одного не заполены эти поля, то выводились списком игроки и какое(какие) поля не заполнены... Как такое реализовать?? Таблица юзеров состоит примерно так: uid user_name user_teamid user_steam user_ucp последние 2 как раз надо проверить...
2. Alho - 27 Сентября, 2012 - 11:50:45 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT user_name WHERE user_teamid=$curent_user_teamid AND user_sream=NULL AND user_ucp=NULL


?
3. EuGen - 27 Сентября, 2012 - 13:16:54 - перейти к сообщению
Alho пишет:
SELECT user_name WHERE user_teamid=$curent_user_teamid AND user_sream=NULL AND user_ucp=NULL

Во-первых, не AND, а OR (следуя условиям задачи)
Во-вторых, сравнивать на NULL при помощи равенства бессмысленно (нельзя сравнить конкретное значение и отсутствие значения), поэтому в MySQL предусмотрен оператор IS NULL
В-третьих, нужно не просто выбрать пользователей, у которых что-либо не заполнено, но так же и получить список - у кого и что не заполнено, поэтому, я думаю, будет все же два разных запроса на эта два поля.
4. ridvik - 27 Сентября, 2012 - 13:19:37 - перейти к сообщению
EuGen я вот тоже так думаю, первым сделать user_teamid а уже вторым выбирать пустые значения или нет... но все же как реализовать до конца мне не понятно...
5. EuGen - 27 Сентября, 2012 - 13:29:36 - перейти к сообщению
Так в чем вопрос?
Выбрать:
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

- тех, у кого не заполнено второе.
Если оба запроса ничего не вернули - значит, все в порядке. Если вернули - то показывать список по каждому полю.
6. ridvik - 27 Сентября, 2012 - 13:31:51 - перейти к сообщению
EuGen вы понимаете что у меня на простую проверку 100500 запросов будет?)
7. EuGen - 27 Сентября, 2012 - 13:56:11 - перейти к сообщению
ridvik
Вы сами так поставили задачу. Если важно избежать запросов, то можно использовать один (связывая условия через OR) - и затем анализировать данные в PHP. Однако следует помнить, что запрос, использующий OR, почти всегда не будет использовать индекс - даже если он построен по релевантным полям. Поэтому, вероятнее всего, следует проверять конкретную запись при внесении, сэкономив тем самым в производительности - ведь тогда данные априори не будут некорректными.
8. Мелкий - 27 Сентября, 2012 - 14:20:29 - перейти к сообщению
EuGen пишет:
почти всегда не будет использовать индекс

Или использовать сразу 2. index_merge, MySQL 5.0 и старше.
9. ridvik - 28 Сентября, 2012 - 18:55:01 - перейти к сообщению
че то я не могу все же разобраться... с запросами понятно как в пхп условиями это сделать?? нужно что то типо этого...

короч нужно сделать ссылку, которая появлялась бы только если в базе данных пользователей с одинаковым user_teamid больше 5 и user_steam и user_ucp не были пустыми у всех... а если хотя бы у одного последние два пользователя не заполнены то выводился список с пользователем и что у него не списано... помогите кодом плиз...

 

Powered by ExBB FM 1.0 RC1