Forum Webscript.Ru
Программирование => PHP => Тема начата: it4all от 12 Января 2004, 17:13:08
-
Хочу открыть новую тему ,на которой буду задавать не самые глупые вопросы,
которые наверное будут интересны для многих начинающих (если конечно будет определенная активность).
Итак вопрос 1.
Как проще всего вывести из БД дату последнего сообщения,при создании форума (как это реализовано на этом форуме).
Вопрос 2.
Приведите псевдокод вывода цифровых ссылок ,какие появляются в поисковиках,гостевых,форумах,
при большом количестве записей.
Пока все.
-
1. Есть тысяча и один способ получения даты последнего сообщения. Какая БД?
2. ты хоть сам-то понял что ты написал? "псевдокод вывода цифровых ссылок" %) Наверное разбивку на страницы ты имел ввиду?
-
NeoNox про 2 он скорее всего айдишники имел в виду=)
[off]интуиция подсказывает, что это будет популярная тема для флейма=)[/off]
-
it4all:
Хочу открыть новую тему ,на которой буду задавать не самые глупые вопросы,
Ромик еще тему видать не видел :)
it4all:
Как проще всего вывести из БД дату последнего сообщения,
SELECT TOP 1 TIME_STAMP
FROM ACCOUNTING
ORDER BY TIME_STAMP DESC
вместо accounting твоя таблица.
http://www.webscript.ru/stories/03/07/28/9055560 ответ на второй вопрос, если я его правильно понял :), но там еще хорошие комментарии :D
AliMamed:
всего айдишники имел в виду
я склоняюсь к идее NeoNox...
[OFF]
> AliMamed:
> интуиция подсказывает, что это будет популярная тема для флейма=)
ты был первым :)
[/OFF]
-
it4all:
не самые глупые вопросы
ты себе льстишь :-)))
it4all:
Как проще всего вывести из БД дату последнего сообщения
Запросить ее. Точно так же, как и любые другие данные.
Приведите псевдокод
Для вопросов "приведите" существует "форум поиск и изготовление скриптов". Существует специально для тех, кто не умеет пользоваться поиском по форуму.
Поясняю намек: в форуме тема такого вывода "цифровых ссылок" обсуждалась много раз и найти примеры можно с легкостью, воспользовавшись поиском.
Если, конечно, свой вопрос научиться формулировать менее коряво.
Ну, а сам поиск служит для тех, кто не хочет сам подумать над решением простой задачи, а ищет сразу готовенький код. Хотя таким, обычно, и поиском пользоваться лень.
Пока все.
Ждем продолжения :-)
-
AliMamed
при большом количестве записей.
т.е. - все-таки, постраничный вывод. Задача, которую совершенно точно, что можно решить самому - если четко представлять себе, что делаешь и знать арифметику в объеме начальной школы.
Т.е. любые коды на самом деле - не пример кода. А объяснение программисту его задачи.
Если перед человеком встает такая задача, то, чаще всего, он не представляет себе, что такое html и как работают скрипты
-
Нн -даа, вместо конкретной помощи,спошные охаивания,это вас хлебом кормить не надо.
-
если в виде конкретной помощи ты принимаешь только готовый код, то да - ты ошибся адресом. Куда обращаться за к готовым - я тебе уже сказал.
кроме "охаивания" здесь тебе задали много вопросов, и дали много советов.
Не хочешь к ним прислушиваться, хочешь обижаться - дело твое.
если ты думаешь, что здесь сидят телепаты, не зная ни структуры твоего форума, ни структуры базы данных, тебе напишут готовый запрос - ты наивный самоуверенный фантазер.
Если ты так ленив, что не желаешь ни подумать, ни воспользоваться поиском для решения своей задачи, хотя бы показать, что ты думал, спросить конкретный вопрос, а не готовый код - форумы не для тебя. Здесь помогают людям, которые сами стараются что-то сделать. Хотя бы пытаются.
-
it4all
sql запрос привел? привел!
ссылку дал? дал!
зачем наезжать, что нет конкретной помощи? :D
-
Всем на кого наехал - извиняюсь!
Вчера сидел поздно и видимо не разобрался.
Yukko за ссылку спасибо, буду пробовать, впредь постараюсь более корректно задавать вопросы (возможно уже сегодня).
-
Кхмм.
что-то такое примерно я и предполагал...
Приведите псевдокод вывода цифровых ссылок ,какие появляются в поисковиках,гостевых,форумах,
при большом количестве записей.
А почему бы тебе не посмотреть ответ в статье на своем сайте?
-
Вопрос за нумером 2 - решен. Всем кто помогал спасибо.
Новый вопрос:
На данном форуме при посыле вылазиет инфа - "что если броузер не поддеживает редирект,жми сюда".
Актуально ли это сейчас и что за броузеры такие ?
Р.S.
Я совсем не претендую на интересность и уникальность своих вопросов, но искать ответы на таком громадном форуме, не представляется возможным.
-
Я совсем не претендую на интересность и уникальность своих вопросов
Ну, и то хлеб. Начинаешь исправляться - это хорошо.
искать ответы на таком громадном форуме, не представляется возможным.
Во-первых, тебя никто не заставляет перерывать весь форум по одному сообщению.
Есть такой раздел, как "Поиск", который будет искать САМ, за тебя.
Во-вторых, и это меня интересует гораздо больше:
Я тебя уже не посылаю на форум.
Я тебя посылаю на втой собственный сайт.
Меня страшно интересует вопрос - почему ты не стал читать ответ на своем сайте, а пришел на форум?
Тебя не затруднит ответить на этот вопрос?
Уважь старика.
-
it4all:
но искать ответы на таком громадном форуме, не представляется возможным.
там наверху в меню есть ссылочка поиск, если ты не увидел, поиск по MySQL базе реализовывается при помощи SQL запросов, которые формируются на основании твоего ввода с учетом списков синонимов, списков слов, которые игнорируются при поиске, а так же с возможностью использовать логические операторы поиска AND OR и шаблоны (wildcards)
а если увидел поиск, но говоришь подобную фразу, то это называется изнасилование здоровых организмов отвечающих на этом форуме.
-
по твоему вопросу - не актуально. старые.
-
RomikChef:
Меня страшно интересует вопрос - почему ты не стал читать ответ на своем сайте, а пришел на форум?
у меня есть несколько вариантов ответов.
а. не разобрался, как оно работает, ну слишком там наворочено для постраничной системы вывода...
б. не знает, что оно там вообще есть.
в. ищет альтернативу (хотя врядли)
У меня есть другой вопрос, что такое псевдокод?
Я до сих пор перечитываю книжку Информатика и вычислительная техника, где реализация решения всех задач сделана на школьном алгоритмическом языке. Да-да был такой. Программы на школьном алгоритмическом языке выполняются разными исполнителями (вначале описывается), например, исполнитель робот, либо исполнитель световое перо.
Насколько мне известно, в некоторых книгах, которые описывают реализацию математических алгоритмов в вычислительной технике, тоже все алгоритмы написаны на абстрактном языке программирования, т.е. представляют определенного рода псевдокод, который потом программисту надо будет реализовывать.
-
it4all:
На данном форуме при посыле вылазиет инфа - "что если броузер не поддеживает редирект,жми сюда".
Актуально ли это сейчас и что за броузеры такие ?
на этом форуме редирект в том месте, о котором ты говоришь реализован через яваскрипт. если яваскрипт на клиенте отключен, редиректа не произойдет
-
AliMamed:
на этом форуме редирект в том месте, о котором ты говоришь реализован через яваскрипт.
Если это - яваскрипт, то я - пасхальный заяц.
RomikChef:
по твоему вопросу - не актуально. старые.
Если говорить именно о браузерах, то ты полностью прав.
Но ведь есть ещё и поисковики. Пусть в нашем конкретном случае с форумом это не актуально (редиректы типа "Сообщение добавлено" или "Сейчас будут результаты поиска"), но забывать об этом имхо не стоит.
-
FreeSpace
Ну, раз здесь не актуально, то приведи актуальный пример, когда это поисковику надо понимать мету, или, точнее, что будет, если поисковик не поймет.
-
RomikChef
Ничего не будет. Поисковик просто не поймет, что его пытаются редиректнуть на другую страницу.
С актуальным примером сложнее, в голову сейчас ничего не приходит.
Если сходу - поисковик зайдет по ссылке "сообщения за сегодня" сверху и обломается.
Конечно, пример не ахти какой, но сама идея вроде понятна.
Я согласен, что строить сайты с навигацией на основе таких рефрешей - извращение ещё то. Но мало ли :)
-
RomikChef и Yukko отвечаю - а. не разобрался, как оно работает, ну слишком там наворочено для постраничной системы вывода...
Новый вопрос.
Написал свой маленький форум.Подскажите что сделано не правильно ?
Его обслуживают 4 рнр-файла и 1 таблица MySQL.
Структура таблицы:
topic varchar (5) - принимает значения "yes"-если это тема или "no"-если ответ
topic_id varchar(20) - уникальные id тем (генерируется uniqid())
topic_name varchar (255) - заголовки тем
name varchar (20) - имена участников
email(40) - их мыло
url(40) - сайты если есть
date datetime - дата внесения записи
message text - сообщение
last_reply datetime - дата последнего сообщения.
Файл forum.php
Здесь в цикле выводятся все строки где "topic=yes",и вэтом же цикле выводятся количество строк
с соответсвующем теме "topic_id" для отображения количества сообщений (естественно кроме самой темы)
Затем отображается форма для создания новых тем (без всякой предварительной регистрации).
Данные имя,емаил,сайт,заголовок темы,текст темы пердаются файлу "add_forum_topic.php",где
идет проверка на корректность е-майла, пустоту сообщения,удаляются весь html и апострофы.
Затем все это хозяйство вносится в БД,причем дата создания темы дублируется на дату последнего сообщения.
И с помощью header("Location: forum.php") возвращает пользователя на главную форума.
Кликнув по заголовку темы пользователь попадает на файл "viewforum.php",скрипту которого передается id-темы.
Здесь выбираются данные по "topic_id" и внизу отображается форма для ответов,которая делает тоже-самое,
и заодно еще и апдейтит "last_reply" по строке темы.
Вот вроде и все.
-
смотри-ка - освоил, наконец, название правильное, вместо "вывода цифровых ссылок, какие появляются в оисковиках, гостевых, форумах" :-))
поле топик должно быть пустым у первых сообщений темы и содержать номер первого, если это ответ. а не йес но.
соответственно, список тем выводится по условию топик=""
айди генерить не надо - пусть мускуль генерит автоинкрементом.
Больше пока особых замечаний нет
-
По-моему структура изначально неверная.
К теме нужно было относиться как к контейнеру для сообщений, их нельзя ставить на один уровень и запихивать в одну таблицу.
Теперь что касается типов полей:
topic varchar (5) - принимает значения "yes"-если это тема или "no"-если ответ
Для этих целей используют поле enum или tinyint (1 - тема, 0 - сообщение).
Конечно же, следуя совету RomikChef\'а, от этого поля можно вообще отказаться.
topic_id varchar(20) - уникальные id тем (генерируется uniqid())
Почему варчар и зачем uniqid()?
Чем тебе не угодил числовой primary key с auto_increment?
Что касается date и last_reply, то тут и виден первый признак неправильной структуры БД.
Зачем каждой записи иметь поле last_reply? Вообще при таком подходе время последнего ответа можно вычислить "на лету".
-
FreeSpace:
числовой primary key с auto_increment?
ему не угодил потому, что автоинкремент генерится ВСЕМ записям новый.
А он хотел один ид у всех сообщений темы.
Однако, не подумал, что можно сделать проще, а уникальный ид нужен каждому сообщению, если учесть теоретическую возможность редактирования.
FreeSpace:
К теме нужно было относиться как к контейнеру для сообщений, их нельзя ставить на один уровень и запихивать в одну таблицу.
в простом форуме можно.
FreeSpace:
Зачем каждой записи иметь поле last_reply?
при такой структуре не обойтись.
Да и много места не займет.
FreeSpace:
? Вообще при таком подходе время последнего ответа можно вычислить "на лету".
для этого нужен джойн, а это потенциальные тормоза.
так что, можно и продублировать
-
По-моему, если разнести темы и сообщения по двум разным таблицам, производительность сильно не упадет, зато 90% всех замечаний можно будет ликвидировать сразу.
А вот если продолжать лепить всё в одну кучу, то будет у нас страшный монстр :)
Вот про редактирование отдельных сообщений я тоже сразу не подумал, а автору эта возможность похоже и не нужна - форум-то совсем простой.
-
it4all:
Хочу открыть новую тему ,на которой буду задавать не самые глупые вопросы
я так настроился серьезно, думаю важная тема наверное. Читал аж понять немог...
it4all:
Как проще всего вывести из БД дату последнего сообщения
читал и думал - может я гоню?..., неужели все так сложно?..., может я неправильно чтото делаю?...
очень неглупый вопрос, как вывести последнюю дату, ... точно... как же ее вывести? ведь последняя.
it4all:
Приведите псевдокод вывода цифровых ссылок
:) псевдокод такой: вывести тег с данными :)))))
it4all:
Пока все.
тема написана в стиле - "а ну ка нигеры..."
хотя бы написал "извините, несоображаю пока", как начинал например я, в конце нужно писать -"с поклоном вам дорогие специалисты" и др.
Счастливо, Моцарт :)
-
Резюмирую всю информацию за сегодня.
1.Форум должон обслуживатся минмум 2 таблицами,одна для тем,другая для ответов.
2.Ликвидирую "yes" и "no",и заменяю их на 1 и 0
3.Но вот как без всяких-разных "id" обойтись,не представляю.Как различить ответы для одной темы
от ответов для другой.Более того ,как наведеш курсор на любую ссылку на форуме,так там не один,
а несколко "id" передаются.
4.Накой мне "auto_incrementить" все ответы , не понял.
На сегодня все.Не хочу много занимать вашего драгоценного времени.
З.С.
-----------
B]Yukko[/B] - У меня есть другой вопрос, что такое псевдокод?
Отвечаю - не помню откуда я взял это слово,но если посмотреть мое предыдущее сообщение,то
оно описывает работу форума,практически без синтаксиса рнр.
Не ахти какой,но всеже это псевдокод (или алгоритм).[
-
RomikChef:
Однако, не подумал, что можно сделать проще, а уникальный ид нужен каждому сообщению, если учесть теоретическую возможность редактирования.
Как проще?
А под редактированием вы имеете ввиду ссылочку "Править"
-
Но вот как без всяких-разных "id" обойтись,не представляю.Как различить ответы для одной темы
от ответов для другой.Более того ,как наведеш курсор на лбую ссылку на форуме,так там не один,
а несколко "id" передаются
Сделать в таблице поле с id темы, и отбирать по нему...
Накой мне "auto_incrementить" все ответы , не понял
Для того, что бы можно было спокойно реализовывать п.5
5.Насчет редактирования собственных ответов, положа руку на системный блок,признайтесь когда в
последний раз занимались этим
Положа руку на сердце могу сказать, что я лично редактирую, треть своих сообщений, причем чаще всего в течение 20-30 минут...
-
Приветствую новых участников моей глупой темы.
Phoinix:
Сделать в таблице поле с id темы, и отбирать по нему...
Я так ихотел ,но FreeSpace и RomikChef
в предыдущих сообщениях усиленно отговаривают меня от этого.
-
it4all
id темы будет браться из второй таблицы со списком тем...
tarya
[OFF]Афигеть!!![/OFF]
-
it4all
Я немного не в тему, но думаю, что вот это
http://forums.webscript.ru/showthread.php?s=&threadid=14103&pagenumber=1
тебе стоит почитать
[OFF]кажтеся, я опоздал на праздник жизни...[/OFF]
-
it4all:
Я так ихотел ,но FreeSpace и RomikChef в предыдущих сообщениях усиленно отговаривают меня от этого.
Покажи мне, где я тебя отговаривал?
Я наоборот говорил тебе, что нужны две таблицы и я рад, что ты это понял.
Ну а как ты собирался определять, какое сообщение принадлежит какой теме? Конечно же по полю thread_id в таблице сообщений! В этом поле лежит айди темы, в которой оставлено это сообщение.
Вот создаешь ты новую тему, делаешь запрос типа
INSERT INTO threads VALUES (bla-bla-bla)
Потом получаешь auto_increment id новой темы и создаешь первое сообщение в теме:
INSERT INTO messages VALUES(NULL, thread_id, ...)
NULL стоит на том месте, где СУБД сама подставит новый auto_increment id, а thread_id - это айди темы, который ты получил после предыдущего запроса.
А вообще скачай какой-нить бесплатный форум, например phpBB (http://www.phpbb.com) и посмотри на структуру базы данных - сразу много любопытных вещей поймешь.
tarya
Ты не задумывался над тем, чтобы критически оценить эти пару килобайт кода перед тем, как постить их с целью показать пример новичку?
-
RomikChef:
айди генерить не надо - пусть мускуль генерит автоинкрементом.
FreeSpace:
Почему варчар и зачем uniqid()?
Чем тебе не угодил числовой primary key с auto_increment?
Показываю.
З.С.
-------------
Информации набралось много, мне ламеру,нужно ее переварить ,пошевелить тем,что у меня вместо мозгов.
А посему на денек можно прерватся. ОК.
А напоследок очень хочется кинуть маааленький камешек в огород Князя Тари.
tarya на твоей главной все даты написаны не очень куросяво,год впереди понимаеш, не очень, как-то для крутого программера.Если не знаешь как переделать пиши ,подскажу. А за код спрасибо,что не поленился.
-
Мда.
Доходит до него с трудом...
1.Форум должон обслуживатся минмум 2 таблицами,одна для тем,другая для ответов.
Не обязательно.
Если учесть, что принцип объединения до тебя не доходит, то лучше бы ты вернулся к первоначальному варианту
2.Ликвидирую "yes" и "no",и заменяю их на 1 и 0
какие еще 1 и 0? Из какого пальца ты их высосал?
Ты читать умеешь? Цитирую:
RomikChef:
поле топик должно быть пустым у первых сообщений темы и содержать номер первого, если это ответ.
Это в случае одной таблицы.
А в случае двух, то это поле есть только в таблице ответов и содержит айди темы.
3.Но вот как без всяких-разных "id" обойтись,не представляю.Как различить ответы для одной темы от ответов для другой.Более того ,как наведеш курсор на любую ссылку на форуме,так там не один, а несколко "id" передаются.
а никто тебе и не предлагает обходиться. Это проблемы твоего восприятия.
про несколько айди - поподробнее.
4.Накой мне "auto_incrementить" все ответы , не понял.
Ронимать тебе не обязательно. Это ты можешь оставить на потом.
А сейчас просто делай, как велят.
it4all:
усиленно отговаривают меня от этого.
тебя отговаривают от дурацкого самопального айди, который тебе нафиг не нужен, если ты пользуешься базой.
ЕЙ, кто там ему велел разделять?
нарисуйте ему структуры таблиц с пояснениями.
-
Ноу проблем!
Структуру позаимствовал у phpBB, упростив её для твоей задачи:
CREATE TABLE `topics` (
`topic_id` mediumint(8) unsigned NOT NULL auto_increment,
`topic_title` char(60) NOT NULL default \'\',
`topic_time` int(11) NOT NULL default \'0\',
PRIMARY KEY (`topic_id`),
);
CREATE TABLE `posts` (
`post_id` mediumint(8) unsigned NOT NULL auto_increment,
`topic_id` mediumint(8) unsigned NOT NULL default \'0\',
`post_time` int(11) NOT NULL default \'0\',
`post_username` varchar(25) default NULL,
`post_text` text,
PRIMARY KEY (`post_id`),
);
Рассмотрим на примере такие запросы:
1. Создание темы.
2. Ответ в теме.
3. Редактирование сообщения в теме.
4. Удаление сообщения из темы.
5. Удаление всей темы.
1. Создание темы
// UNIX_TIMESTAMP() - это mysql-функция, которая в данном случае возвращает текущее время в юниксовом формате.
mysql_query("INSERT INTO topics VALUES (NULL, \'Название темы\', UNIX_TIMESTAMP())")
// Получаем ID только что созданной темы
$topic_id = mysql_insert_id();
// Создаем первое сообщение в теме
mysql_query("INSERT INTO posts VALUES (NULL, ".$topic_id.", UNIX_TIMESTAMP(), \'Имя автора сообщения (в данном случае - создателя темы)\', \'Текст сообщения\')");
2. Ответ в теме
// Подразумевается, что ID темы заранее известен и лежит в переменной $topic_id
mysql_query("INSERT INTO posts VALUES(NULL, ".$topic_id.", UNIX_TIMESTAMP(), \'Имя автора сообщения (ответа)\', \'Текст сообщения (ответа)\')");
3. Редактирование сообщения в теме
// Подразумевается, что ID редактируемого сообщения заранее известен и лежит в переменной $post_id
// Так же новый текст сообщения лежит в переменной $new_message
mysql_query("UPDATE posts SET post_text = \'".$new_message."\' WHERE post_id = ".$post_id);
4. Удаление сообщения из темы
// Подразумевается, что ID удаляемого сообщения заранее известен и лежит в переменной $post_id
mysql_query("DELETE FROM posts WHERE post_id = ".$post_id);
5. Удаление всей темы
// Подразумевается, что ID удаляемой темы заранее известен и лежит в переменной $topic_id
mysql_query("DELETE FROM topics WHERE topic_id = ".$topic_id);
// Теперь удаляем все "осиротевшие" сообщения из только что удаленной темы
mysql_query("DELETE FROM posts WHERE topic_id = ".$topic_id);
Я не описывал получение списка тем и отображение сообщений в конкретной теме, потому что думаю что из вышеприведенного кода полностью понятны взаимоотношения между двумя таблицами и нужные запросы можно будет построить самостоятельно.
Если это не удастся, советую перечитать документацию MySQL (http://www.mysql.com/doc/en/).
Если где-то что-то упустил из виду, буду рад критике.
-
[OFF]лично я не люблю писать название таблицы в каждом имени поля.
при желании всегда можно написать через точку...[/OFF]
-
[OFF]Я тоже не люблю, но как уже говорил - структуру таблиц вместе с именами вытащил из phpBB. Да и новичку понятнее будет, где у него что лежит.[/OFF]
-
Есть предложение: поставить на главной странице форума большую и видную ссылку на поиск :)
-
CGVictor ха.ха.ха
наивный.
-
RomikChef, не скажи. Многих вопросов бы просто не возникало...
(sorry, что оффтопик)
-
CGVictor, ты абсолютно не понимаешь психологию этих людей. Абсолютно.
Чтобы воспользоваться поиском, надо
1. думать самому.
2. хотеть сделать что-то самому.
Люди, которые задают вопросы на форумах, в 90% случаев не хотят ни того ни другого. А часто еще и не умеют.
И хоть ты 10 кнопок повесь - ничего не изменится.
И давай закроем эту тему.
Я чуть больше твоего видел вопросов на форумах.
-
RomikChef:
Чтобы воспользоваться поиском, надо
1. думать самому.
2. хотеть сделать что-то самому.
Я недавно вользовался поиском, и что ?
Попадаешь на темы где такие же ламеры как ты ,пытаются обьясниться с теми кто, что-то знает.
Вы предлагаете искать необходимое в этой куче бестолковых вопросов и раздраженных ответов. По мне ,так это чистый мазохизм. Более того я к сожалению не располагаю таким количеством свободного времени и бесплатным интернетом.
З.С.
--------------------------
FreeSpace дал мне ссылку на "phpBB" , я его скачал, установил и теперь изучаю. С этих пор все вопросы ,которые я задавал здесь прояснились и своей тупостью раздражают меня самого. Пока я не хочу тратить на себя ваше внимание, но и закрывать тему тоже. Возможно чуть позже попрошу еще немного информации и надеюсь, что вопросы не будут такими тупыми.
-
Ну, от твоего желания, туповатый друг мой, тут ничего на значит.
адью.