Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> select where `x` in (1,2,3) order by 1,2,3 ? mysql 
V
    Опции темы
mishaSL
Дата 29.6.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 7
Всего: 54



flashaa, эта информация не лишняя. Это называется нормализация структуры БД. С такой структурой БД можно будет одним запросом выбирать необходимую информацию, причем достаточно быстро.
Когда вы храните информацию в виде id1|id2|id3 в текстовом поле, то есть очевидные минусы:
 1. для выборки необходимо минимум два запроса: выбрать эту строку -> обработать результат -> выброть необходимые данные по       пользователям.
 2. Вы изначально не даете себе возможность хранить другие дополнительные данные, к примеру дату закрытия. Или есть появится необходимость в функции повторного открытия комната, то вам будет необходимо всего лишь  добавить в таблицу с историей поле дата и вы сможете хранить информацию о любом кол-ве закрытия комнат.
 3. с отдельной таблицей у вас появляется возможность бысторого вывода статистики, к примеру: в каких комнатах пользователь участвовал и т.д.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
flashaa
Дата 29.6.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



Цитата(mishaSL @ 29.6.2007,  16:57)
1. для выборки необходимо минимум два запроса: выбрать эту строку -> обработать результат -> выброть необходимые данные по       пользователям.
 2. Вы изначально не даете себе возможность хранить другие дополнительные данные, к примеру дату закрытия. Или есть появится необходимость в функции повторного открытия комната, то вам будет необходимо всего лишь  добавить в таблицу с историей поле дата и вы сможете хранить информацию о любом кол-ве закрытия комнат.
 3. с отдельной таблицей у вас появляется возможность бысторого вывода статистики, к примеру: в каких комнатах пользователь участвовал и т.д.

1. Тут согласен
2. Дата закрытия, открытия - параметры самой комнаты, они хранятся в соотв. полях таблицы комнат.
Исходя из задачи: открывать закрытую комнату нельзя.
3. А вывод статистики в каких комнатах участвовал человек у меня происходит
Код

select * from room where (history like '%|idx|%') or (history like '%(idx|%') or 
(history like '%|idx)%')


 само поле history выглядит как "(id1,id2,id3)"  

Хотя вы меня переубедили, лучще сделаю лишнюю таблицу, сделаю бОльший запрос по вставке, зато все запросы по выборке упростятся а PHP-код упроститься и при вставке и при выборке.

Это сообщение отредактировал(а) flashaa - 29.6.2007, 17:30
PM MAIL   Вверх
mishaSL
Дата 29.6.2007, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 7
Всего: 54



Цитата(flashaa @  29.6.2007,  17:29 Найти цитируемый пост)
сделаю бОльший запрос по вставке, зато все запросы по выборке упростятся а PHP-код упроститься и при вставке и при выборке.

  smile 


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
flashaa
Дата 29.6.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



Цитата(sTa1kEr @ 29.6.2007,  00:43)
Нет, в данном случае для поля надо задавать Alias.
Код

$r = mysql_query("SELECT COUNT(*) AS count_user_name FROM tbl_name");
$count = mysql_result($r,$i,"count_user_name");

Или обращаться по индексу.

Что-то не работает  smile 

вот такой запрос:

Код

$r_ready_count=mysql_query("select count(*) as ready_users from users where `ready?`=1 
and `active_game`=".mysql_result($r_game,0,"id"));


вот так извлекаю:

Код

mysql_result($r_ready_count,0,"ready_users")


запрос проходит нормально. а вот извлечение выдает: 


Column count doesn't match value count at row 1
PM MAIL   Вверх
sTa1kEr
Дата 29.6.2007, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 9
Всего: 146



Цитата(flashaa @  29.6.2007,  19:43 Найти цитируемый пост)
Column count doesn't match value count at row 1 

Это ошибка бывает при вставке данных. Вы уверенны, что она происходит именно в этом запросе? Делайте проверки после каждого запроса.
Цитата(flashaa @  29.6.2007,  19:43 Найти цитируемый пост)
where `ready?`=1 

Вопросительный знак - это вы так колонку назвали? Оригинально smile
PM MAIL   Вверх
flashaa
Дата 29.6.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



Да, ошибка означает, что кол-во заявленных полей не соотвествует кол-ву значений, моя неправда..  smile 
PM MAIL   Вверх
Golda
Дата 30.6.2007, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 6
Всего: 42



sTa1kEr, спасибо за информацию о stored procedures в mysql. Упустила это событие


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.