Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обновить запись в ячейке одним запросом
 
 автор: Deed   (24.07.2012 в 08:38)   письмо автору
 
 

Доброго времени суток!
Проблема вот в чем.
Имеется, к примеру, в таблице с новостями столбец "vote_plus", в котором записаны через запятую пользователи, оценившие данную новость положительно: "Петя, Ваня, arnold_232, Маня".
И вот, нужно добавить нового пользователя.
Суть вопроса: возможно ли как-то так сделать, чтобы добавление происходило в одном запросе, без предварительного SELECT `vote_plus` FROM... с последующим UPDATE...?

Спасибо!

  Ответить  
 
 автор: confirm   (24.07.2012 в 08:43)   письмо автору
 
   для: Deed   (24.07.2012 в 08:38)
 

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

Возможно, для этого выбросить к черту поле несущее вот такое - "Петя, Ваня, arnold_232, Маня",
и создать таблицу связей id проголосовавших пользователей c id новостей.

  Ответить  
 
 автор: Deed   (24.07.2012 в 09:04)   письмо автору
 
   для: confirm   (24.07.2012 в 08:43)
 

Ага... Спасибо!
А какая структура таблицы будет?

(Сейчас нашел и буду читать, что такое вообще, эти таблицы связей. Больно не пинайте!)

  Ответить  
 
 автор: Valick   (24.07.2012 в 09:42)   письмо автору
 
   для: Deed   (24.07.2012 в 09:04)
 

А какая структура таблицы будет?
идентификатор новости | идентификатор пользователя

всего два поля в таблице
первичный ключ на оба поля

  Ответить  
 
 автор: Deed   (24.07.2012 в 12:00)   письмо автору
 
   для: Valick   (24.07.2012 в 09:42)
 

Пытаюсь уяснить картину в целом... Но... Но, ведь, тогда эта таблица будет невероятной длины!!

  Ответить  
 
 автор: confirm   (24.07.2012 в 12:08)   письмо автору
 
   для: Deed   (24.07.2012 в 12:00)
 

>Но, ведь, тогда эта таблица будет невероятной длины!!

И что? Ваша строка была бы в любом случае намного длиннее, а в этой строке надо еще разбираться кто есть кто.

  Ответить  
 
 автор: Deed   (24.07.2012 в 14:29)   письмо автору
 
   для: confirm   (24.07.2012 в 12:08)
 

Здравствуйте, уважаемый confirm.
Если Вас не затруднит, как будет выглядеть выборка и добавление конкретного факта голосования конкретного пользователя в конкретной новости?
Прошу Вас, расскажите об этом!
Заранее благодарю.

  Ответить  
 
 автор: confirm   (24.07.2012 в 15:00)   письмо автору
 
   для: Deed   (24.07.2012 в 14:29)
 

Добавление данных в таблицу производится оператором
INSERT INTO table VALUES(id_news, id_user)
а для конкретики факта, конкретной новости и конкретного пользователя, укажите свои конкретные данные.
Выборка из таблицы производится оператором SELECT, но выборка может быть непосредственно из этой таблицы, а может быть как вложенный запрос при выводе новостей. Чего вам надо я не знаю, а посему никакой конкретики прописывать не буду.
В этом разделе примеров добавлений/выборки столько, что их можно засушить на приличный гербарий. Или вам надо писать отдельно, чтобы имя таблицы вашей было, имена полей ваших, значения данных, иначе трудно воспринимаются такие примеры?

  Ответить  
 
 автор: Deed   (24.07.2012 в 17:23)   письмо автору
 
   для: confirm   (24.07.2012 в 15:00)
 

Спасибо. Я понял идею. Это, что-то связано с UNION, вероятно. В смысле, одним запросом при выводе новости. Хорошо. Еще раз спасибо! Буду собирать гербарий.

  Ответить  
 
 автор: confirm   (24.07.2012 в 23:28)   письмо автору
 
   для: Deed   (24.07.2012 в 17:23)
 

Нет, не UNION, а JOIN. Я имел ввиду, что при выводе новостей вам нужно получить и вывести еще, например, количество голосов поданных за новость.

  Ответить  
 
 автор: Valick   (24.07.2012 в 09:40)   письмо автору
 
   для: Deed   (24.07.2012 в 08:38)
 

Содержимое поля "Петя, Ваня, arnold_232, Маня" - это крайне неестественно для реляционной базы данных. Поле должно содержать только одну сущность и каждая ячейка должна содержать только одно значение. Ситуации с "Петя, Ваня, arnold_232, Маня" допустимы только в определенных случаях когда требуется денормализация и являются вспомогательными данными (т.е. не отменяют хранения этих данных в нормализованном виде). Не так давно я предлагал такую идею для вывода тэгов к статьям, для избавления от циклов при выборке. Единственное условие нужно синхронизировать актуальность этого вспомогательного поля при добавлении, удалении или изменении тэгов.
Почитайте про нормализацию таблиц (нормализация БД)

  Ответить  
 
 автор: Deed   (24.07.2012 в 11:58)   письмо автору
 
   для: Valick   (24.07.2012 в 09:40)
 

Спасибо! Я все понял, прочитав о нормализации здесь: http://www.softtime.ru/bookphp/gl12_6.php, за что моя благодарность cheops'y!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования