Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Программирование > Базы данных

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 19.12.2003, 16:46
Crazy вне форума Посмотреть профиль Отправить личное сообщение для Crazy Посетить домашнюю страницу Crazy Найти все сообщения от Crazy
  № 21  
Crazy
[+1 23.05.11]
 
Аватар для Crazy

Регистрация: Dec 2001
Сообщений: 4,159
Поясняю свое недоумение:

1. Если нам нужно узнать количество тем -- у нас есть "select count(*) ...".
2. Если нам нужно получить список всех тем -- у нас есть "select * ...".

Так что по-прежнему в недоумении относительно того, почему у тебя падало даже до использования count(*).
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++

Старый 19.12.2003, 17:00
telesar вне форума Посмотреть профиль Отправить личное сообщение для telesar Посетить домашнюю страницу telesar Найти все сообщения от telesar
  № 22  
telesar
 
Аватар для telesar

Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
Хорошо, попытаюсь прояснить ситуацию.
В базе 3 таблицы, относящиеся к форуму: subjects (содержит названия тем и их id); profiles (содержит инфу о людях) и messages (содержит сообщения, их id - совпадающие с id соответствующей темы, даты отправки сообщений и автора сообщения).

Открывая форум, скрипт смотрит max(id) из таблицы subjects, затем из таблицы messages для каждого id находит последнее сообщение, его автора и дату отправки.
__________________
Funciona situando las manos bajo el secador

Старый 19.12.2003, 17:04
Crazy вне форума Посмотреть профиль Отправить личное сообщение для Crazy Посетить домашнюю страницу Crazy Найти все сообщения от Crazy
  № 23  
Crazy
[+1 23.05.11]
 
Аватар для Crazy

Регистрация: Dec 2001
Сообщений: 4,159
Цитата:
Оригинал написал(а) telesar
Открывая форум, скрипт смотрит max(id) из таблицы subjects,
Зачем ему max(id)?

Цитата:
затем из таблицы messages для каждого id находит последнее сообщение, его автора и дату отправки.
Каким образом ты получил "каждый id"? Посредством духа святого или запросом "select id from ..."?
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++

Старый 19.12.2003, 21:48
kompadre вне форума Посмотреть профиль Отправить личное сообщение для kompadre Найти все сообщения от kompadre
  № 24  
kompadre
 
Аватар для kompadre

Регистрация: Aug 2001
Адрес: Barcelona
Сообщений: 1,277
Отправить сообщение для kompadre с помощью ICQ
funciona situando las manos encima del teclado

Старый 19.12.2003, 23:06
telesar вне форума Посмотреть профиль Отправить личное сообщение для telesar Посетить домашнюю страницу telesar Найти все сообщения от telesar
  № 25  
telesar
 
Аватар для telesar

Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
Сорри за долгое молчание.

Опишу весь алгоритм, опуская мелкие подробности.

Юзер, желая начать новую тему, заполняет форму, в которой указывает свой логин, тему и сообщение. Далее тема заносится в таблицу subjects, где ей присваивается id(auto_increment). Далее select max(id) from subjects - и мы знаем номер этой темы. После этого в таблицу messages заносятся логин, дата, сообщение и этот самый id (но уже не auto_increment, а просто).
Теперь другие юзеры наполняют эту тему сообщениями. Они (сообщения) тоже заносятся в таблицу messages, но id у них у всех одинаковый - это id данной темы.
Далее начинаем просмотр форума. Снова select max(id) from subjects (можно использовать COUNT - сути не меняет). Мы узнали число тем в нашем форуме (допустим 5). Организуем цикл while ($x<=5). В этом цикле выбираем название темы из таблицы subjects, логины авторов и даты первого и последнего сообщения каждой темы - из таблицы messages where id=$x. В этом же цикле всю эту информацию выводим на экран.

Последний этап - юзер кликает понравившуюся тему. Ссылка отправляет нас на файл-обработчик и передает ему переменную id (номер темы). По этому номеру мы восстанавливаем название темы из таблицы subjects и выбираем все сообщения с этим номером id из таблицы messages (соответственно и логины и даты), сортируя их по датам. Выводим на экран.

Вроде бы все. Надеюсь теперь все стало ясно.
__________________
Funciona situando las manos bajo el secador

Старый 20.12.2003, 09:34
Crazy вне форума Посмотреть профиль Отправить личное сообщение для Crazy Посетить домашнюю страницу Crazy Найти все сообщения от Crazy
  № 26  
Crazy
[+1 23.05.11]
 
Аватар для Crazy

Регистрация: Dec 2001
Сообщений: 4,159
Цитата:
Оригинал написал(а) telesar
Далее select max(id) from subjects - и мы знаем номер этой темы.
Черта с два. Ты знаешь номер последней добавленной к этому времени темы, а не ЭТОЙ темы. Не забыл, что к сайту могут обращаться несколько человек сразу и между твоим insert и select мог уже случиться другой insert?

Не надо извращаться там, где есть ШТАТНОЕ решение.

Цитата:
Организуем цикл while ($x<=5).
Вместо того, чтобы делать необоснованные предположения о значениях id'шников нужно просто эти значения запросить. Select'ом.

Так что ни max, ни count здесь вообще не нужны.
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++

Старый 20.12.2003, 13:49
telesar вне форума Посмотреть профиль Отправить личное сообщение для telesar Посетить домашнюю страницу telesar Найти все сообщения от telesar
  № 27  
telesar
 
Аватар для telesar

Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
Цитата:
Не забыл, что к сайту могут обращаться несколько человек сразу...
Конечно забыл, спасибо за напоминание.
А мы не можем блокировать БД на время между insert и select, в ASP, например, есть такая возможность ?
Кстати, а что за ШТАТНОЕ решение ?

Цитата:
Вместо того, чтобы делать необоснованные предположения о значениях id'шников нужно просто эти значения запросить. Select'ом.
То есть так: select id from subjects where subject=$subject ?
__________________
Funciona situando las manos bajo el secador

Старый 20.12.2003, 17:42
Crazy вне форума Посмотреть профиль Отправить личное сообщение для Crazy Посетить домашнюю страницу Crazy Найти все сообщения от Crazy
  № 28  
Crazy
[+1 23.05.11]
 
Аватар для Crazy

Регистрация: Dec 2001
Сообщений: 4,159
Цитата:
Оригинал написал(а) telesar
А мы не можем блокировать БД на время между insert и select[
Можем. Но не будет. Это не наши методы.

Цитата:
Кстати, а что за ШТАТНОЕ решение ?
1. Открываем документацию.
2. Ищем раздел "LXIII. MySQL Functions".
3. Читаем список функция, обращая внимание на комментарии.

Эффект достигается в течении 3 минут.

Цитата:
То есть так: select id from subjects where subject=$subject ?
Мне неизвестен смысл ограничения "subject=$subject", а остальное -- верно. Я бы только добавил "order by нечто".
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++


Последний раз редактировалось Crazy; 20.12.2003 в 17:43.
Старый 22.12.2003, 09:52
telesar вне форума Посмотреть профиль Отправить личное сообщение для telesar Посетить домашнюю страницу telesar Найти все сообщения от telesar
  № 29  
telesar
 
Аватар для telesar

Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
Цитата:
Мне неизвестен смысл ограничения "subject=$subject", а остальное -- верно. Я бы только добавил "order by нечто".
Нам нужно узнать одно число (id названия темы, только что занесенной в таблицу subjects). Зачем нам "order by нечто", ведь число-то одно ?



По поводу Штатного решения:
$link = mysql_connect ('host', 'user', 'pass');
$res=mysql($bd,"insert into subjects values ('','$subject')");
$id = last_insert_id($link);

где $subject - название темы. Что ли так ? И необходимо ли указывать link_identifier, чтобы возвратился id именно этого пользователя, или необязательно ?
__________________
Funciona situando las manos bajo el secador

Старый 22.12.2003, 16:00
telesar вне форума Посмотреть профиль Отправить личное сообщение для telesar Посетить домашнюю страницу telesar Найти все сообщения от telesar
  № 30  
telesar
 
Аватар для telesar

Регистрация: Feb 2002
Адрес: Саратов
Сообщений: 93
По умолчанию Crazy, please !

:-)
__________________
Funciona situando las manos bajo el secador

Создать новую тему   Часовой пояс GMT +4, время: 18:41.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:41.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.