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 :: Запрос в одно поле через запятые
Как я понял вывод есть, теперь надо всё перечислить через запятую и потом вставить в запрос.
Но тут ещё не очень понял запрос $INSERT = mysql_query("INSERT INTO... надо вставить в скобки for где перечисление или можно отдельно. Вроде вставил в скобки и тогда конечно у меня 2 запроса пошло.
Погуглил ещё и понял что вроде надо применить функцию explode только как...
+ И вывод как я понимаю этих полей надо через implode делать
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
pantela просто implode(',',$_POST['profession']) без всяких массивов
то есть <select name="profession"... (Добавление)
сформируется строка ее и кладете в базу
а при выводе как раз можно explode применить
pantela
Отправлено: 20 Июля, 2011 - 12:21:58
Частый посетитель
Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010
Помог: 1 раз(а)
При запросе запрос идёт, но выводиться ошибка Warning: implode() [function.implode]: Invalid arguments passed in Z:\home\test4.ru\www\add_email.php on line 15
и в таблице поле пустое.
Как я понял не верно передаётся $profession и переменая пуста, и функция не может обработать её?
А если у меня будет случий когда переменя будет NULL что тогда.
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
А я бы сделал для выбора среди нескольких табличку чекбоксов.
Затем считал выбранные из пришедшей формы в массив.
И записал бы этот массив в поле предварительно его сериализовав.
При чтении - обратный процесс:
читаем из БД,
десериализуем,
формируем табличку чекбоксов: прогоняем по массиву всех вариантов и если у нас такие выбраны ставим чекбоксу чекед="чекед". (Добавление)
На самом деле под такое стоит сделать отдельную табличку:
person_id | profession
Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010
Помог: 1 раз(а)
Да но на сколько я знаю лучще иметь доп. поле в таблице, и там всё хранить чем делать новую таблицу и и её грузить.
Ну конечно смотря какой момент.
А грубо если описать у меня таблица из 10 поле, и мне надо эти записи потмо выводить по критериям, навернео использую LIKE, но тут ещё вопрос через LIKE я смогу выделять запись по запятой или надо всё же вместо запятой данные заносить через %.
Но и то я понимаю что LIKE пофиг как разделять вывод.
Просто хорошый вариант хочу найти
Мелкий
Отправлено: 20 Июля, 2011 - 13:19:10
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
pantela пишет:
лучще иметь доп. поле в таблице, и там всё хранить чем делать новую таблицу и и её грузить.
Ага, пока не надо искать по этому полю.
Вариант с LIKE:
0) если делаете LIKE '%1%', то найдёт все записи и с 100, и с 41.
1) like '%,1,%' - или следите за тем, чтобы в начале строки и в конце всегда были запятые, или теряете крайние значения. Например, строка "1,2,3,4" не подпадает под условие
2) like '1,%' or like '%,1,%' or like ',1%'. три лайка на каждую строку
И это при том, что like вычисляется для каждой строки, да и не самая дешёвая операция. И, на сколько помню, не использует индексы. Я однозначно за таблицу связей.
----- PostgreSQL DBA
pantela
Отправлено: 20 Июля, 2011 - 13:23:21
Частый посетитель
Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010
Помог: 1 раз(а)
А если а базе держать данные так
%1%2%3%%7%5%11%
И по LIKE делать проверку на вывод тех данных каторые находятся между %%
Но всё же думаю можно тоже самое осуществить и запятыми, LIKE ведь не имеет значение чем там будет делится...
Slavenin
Отправлено: 20 Июля, 2011 - 19:28:09
Посетитель
Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010 Откуда: Тверь
Помог: 4 раз(а)
однозначно использовать доп таблицу, отказаться от like, кроме самых крайних случаев. pantela, поищите про оптимизацию sql и поймете что все, что вам говорили выше, правильно. Я так понимаю что у вас уже устроено это самое доп поле в таблице и теперь вам не хочется все менять, НО настанет такой момент, когда вам ПРИДЕТСЯ это сделать. может не стоит его дожидаться и сделать сразу ПРАВИЛЬНО пока данных не очень много?
Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010
Помог: 1 раз(а)
Я согалсен лучще переделать щас чем потом, тогда у меня немного такой вопрос...
напр. я сделаю новое поле где и буду хранить эти записи для данного пользователя
т.е. делаю поле profession и мне хранить по одной професии по одной записи?
тогда при запросе среди 1000 записей надо выводить только те записи ктаорые WHERE и каков лимит я укажу еслия не знаю его, или для LIMIT ещё отдельно сделать поле?
Просто с стороны оптимизации чем делать доп. запрос на новую таблицу, далле искать среди 1000 записей только несколько записей каторые мне надо, я думал проще сделать доп. поле в той же таблице куда идёт запрос и от туда же выводить данные.
Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010
Помог: 1 раз(а)
Ну код примерно понял, отлько в работе надо проверить, а где тут для запроса задан LIMIT ?
т.к. пользователей будет более 2000 у некоторых большую часть будет проффесия, даже по нескольки получается что в таблице професии будет более 4000 записи, а тут если у пользователя при запросе только одна професия запрос будет пересматривать все записи, вот и спомощю LIMIT вроде оптимизация будет, так вот с твоём случии приведёном коде как я поянл тут лимит можно если и в тблице персон сделать поле где и будет считатся количество професии так?
DeepVarvar
Отправлено: 21 Июля, 2011 - 14:10:36
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Нет - запрос выбирает все профессии из второй таблицы которые отметил о себе конкретный пользователь для вывода информации только о нем.
Какие тут лимиты нафик???
Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010
Помог: 1 раз(а)
Так откуда запрос знает сколько професии у данного пользователя, елси професия одна он будет среди 5000 записей исктаь одну да? и наидёт ту одну и помто не отстоновится да? Потмоу я и хочу LIMIT
Хммм помоему мы друг друга не понимаем
Если не сложно может ПМ может номер АСки скинешь или скаипа )) поможешь...
Тут задача простая 2 файл только один добавляет пользователей, второй выводит...
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.