Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 30.10.2011
Сообщений: 62

Случайная статья

11.06.2012, 10:43. Показов 2092. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я только начал работать с php и хотел бы узнать код случайного вывода статей, тут нарисовал в паинте но что-то сам не знаю как реализовать. Суть в следующем, при нажатии на ссылку Случайная статья, должен делаться запрос к MySQL вывод переменных:id,title,content,data,img, и , где переменая cat для трех статей=random цифр от 1до 43, также переменая podcat=random цифр от 1до 50, и ещё если такое возможно конечно, можно ли сделать что бы повторных выводов той-же статьи не было, и например когда user пересмотрел все статьи и нажимает ещё раз Случайная статья-выходило сообщение-К сожалению, в базе данных отсутствуют новые статьи?
Миниатюры
Случайная статья  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.06.2012, 10:43
Ответы с готовыми решениями:

Не добавляется статья в MySQL
Здравствуйте, уважаемые! Я, пхп-чайник, к вам с очередной проблемой:cry: Сделал добавление статьи на сайт прямо с сайта, создал...

Полная статья на отдельной странице
Доброго всем времени. Совсем ни так давно начал изучать php уже не поверхностно а углубленно, с html и css особых вопросов нет так по...

Новости с постраничной навигацией! Есть статья?
Здравствуйте уважаемые форумчане! Я уже облазил кучу форумов и сайтов, и не нашёл статьи по созданию новостей с постраничной навигацией....

11
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
11.06.2012, 13:02
Цитата Сообщение от WaRstim Посмотреть сообщение
можно ли сделать что бы повторных выводов той-же статьи не было,
Вам придётся в отдельной таблице писать ID пользователя и id статьи прочитанной.
А при выборе проверять, что бы в таблице прочитанных статей ещё было этого номера.
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
11.06.2012, 13:18
Цитата Сообщение от WaRstim Посмотреть сообщение
запрос к MySQL вывод переменных:id,title,content,data,img, и , где переменая cat для трех статей=random цифр от 1до 43, также переменая podcat=random цифр от 1до 50
SQL
1
 SELECT id,title,content,DATA,img FROM `table` WHERE `cat` = '". mt_rand(1,43) ."' AND  `podcat` = '". mt_rand(1,50) ."' LIMIT 1
Цитата Сообщение от WaRstim Посмотреть сообщение
можно ли сделать что бы повторных выводов той-же статьи не было
тогда надо в сессии хранить просмотренные статьи и добавить в условие
SQL
1
 SELECT id,title,content,DATA,img FROM `table` WHERE `cat` = '". mt_rand(1,43) ."' AND  `podcat` = '". mt_rand(1,50) ."' AND WHERE `id` NOT IN ( ". implode(" , ", $_SESSION['viewed']) ." ) LIMIT 1
1
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
11.06.2012, 13:25
Цитата Сообщение от crautcher Посмотреть сообщение
mt_rand(1,43)
какова вероятность того, что не будет не одного пропущенного ID? А если что то удалили? И выпадет число которое не с чем ен совпадёт?
функция mysql rand слишком медленная, можно тогда в 2 запроса делать.
первым выбарть все записи, что бы знать сколько их всего, потом сгенерировать число от 0 до количества - 1. и выбрать что то типа
SQL
1
SELECT ... FROM ... LIMIT $rand, 1;
соответственно если фильтровать просмотренные записи, то количество записей нужно так же брать только те которые ещё не просмотрены.
Цитата Сообщение от crautcher Посмотреть сообщение
тогда надо в сессии хранить
Тогда закройте браузер и откройте - и всё пропало. Если не в бд, то хотя бы в куках.
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
11.06.2012, 13:31
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
А если что то удалили?
рандомом мы задаём категории а не айдишники

Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
SELECT ... FROM ... LIMIT $rand, 1;
нам нужна случайная новость из случайной категории причем не выше 43 и случайной подкатегорией которая не выше 50
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
И выпадет число которое не с чем ен совпадёт?
как задали вопрос так на него и ответил , по формулеровки вопроса должно совпасть
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
11.06.2012, 13:45
Цитата Сообщение от crautcher Посмотреть сообщение
рандомом мы задаём категории а не айдишники
А если категорию удалят?
Цитата Сообщение от crautcher Посмотреть сообщение
нам нужна случайная новость из случайной категории причем не выше 43 и случайной подкатегорией которая не выше 50
Тем проще.
PHP
1
$count = mysql_result(mysql_query("select count(id) from table where cat < 44 and podcat < 51 "), 0)
Если фильтровать по сессиям или кукам, то добавить в условие
SQL
1
WHERE id NOT IN (...)
дальше
PHP
1
2
3
4
5
6
7
 if ($count)
{
    $rand = mt_rand(0, $count - 1);
    //выводим
}
else
    // нет не прочитанных статей
а потом выбор
SQL
1
SELECT * FROM TABLE WHERE  cat < 44 AND podcat < 51 ORDER BY id LIMIT $rand, 1
ну и так же id in not... если фильтровать по кукам.

Так будет всегда, даже если категории или под категории удалят.
И ещё нужно не забыть, что если id будут в куках, то нужно позаботиться о защите от sql injection
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
11.06.2012, 13:51
всё отлично , но можно
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
BY id LIMIT $rand, 1
SQL
1
BY RAND() LIMIT 1
зачем пхп гонять если майскул это умеет
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
11.06.2012, 13:57
Цитата Сообщение от crautcher Посмотреть сообщение
зачем пхп гонять если майскул это умеет
Если в гугл вбить фразу order by rand, то будет куча статей поясняющих почему так делать не нужно.
Это работает когда у вас ну может несколько сотен статей. Когда записей много, сервер будет долго обрабатывать. Может в случае со статьями это и подойдёт, но что если проект разрастётся и таам будут тысячи записей? Потом переделывать? Может проще сразу
Мне вообщем то всё равно, я выразил своё мнение так же как Вы своё, сколько людей столько и мнений
2
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
11.06.2012, 14:01
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Когда записей много, сервер будет долго обрабатывать.
дейтвительно
SQL
1
2
3
4
5
6
7
8
mysql> SELECT COUNT(*) FROM WallPostLog;
+----------+
| COUNT(*) |
+----------+
|  2270244 |
+----------+
1 ROW IN SET (2.43 sec)
mysql> SELECT * FROM WallPostLog ORDER BY RAND() LIMIT 1;
1 row in set (11.24 sec) !!!
0
1 / 1 / 0
Регистрация: 30.10.2011
Сообщений: 62
11.06.2012, 14:14  [ТС]
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Может в случае со статьями это и подойдёт, но что если проект разрастётся и таам будут тысячи записей? Потом переделывать?
Да действительно так, рассчитывается что будет очень много статей
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
11.06.2012, 14:24
WaRstim, подумайте ещё над тем, нужно ли два раза хранить ид категории? Я о категории и подкатегории.
Это будет не удобно если вы захотите сделать трёхровневое вложение.
Можно сделать просто таблицу категорий и подкатегорий одну.
то есть вы для каждой категории заводите поле pid (от parrent_id) и храните там id категории родителя.
то есть у вас есть категория
1 | Программирование
и подкатегория
1 | php
что бы это поместить в одну таблицу, вам нужно просто добавить поле
SQL
1
2
3
id | pid | name
1  | 0   | программирование
2  | 1   | php
На одно поле больше, зато это безграничная вложенность подкатегорий. Уберётся 1 поле лишнее из статей, то есть там не будет больше podcat. И уберётся таблица с подкатегориями.

А дальше можно почитать ещё про http://en.wikipedia.org/wiki/Nested_set_model
Ну это если нужны будут выборки цепочки категорий одним запросом.
А вообще можно и без этого обойтись.
1
1 / 1 / 0
Регистрация: 30.10.2011
Сообщений: 62
11.06.2012, 15:28  [ТС]
спасибо большое! я подумаю над всем сказанным
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2012, 15:28
Помогаю со студенческими работами здесь

Ошибка синтаксиса SQL, статья не добавляется в БД
ошибка : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use...

После обновления страницы статья еще отправляется в базу
после обновления страницы статья еще раз отправляется в базу. как сделать чтобы статья отправлялась только один раз?

нейронная сеть, нужен пример или хорошая статья
очень надо сделать нейронную сеть для распознавания символов. Именно нейронную, по шаблонам не подойдет. Я нашел на ачате...

Случайная песня
Здравствуйте! Хотел бы сделать выбор случайных песен из базы данных(на index.html кнопка(js), играет случайную музыку &lt;script&gt; ...

Случайная выборка из БД по времени
Доброго всем времени суток. У меня возник такой вопрос. Как сделать случайную выборку из базы данных по времени. Ну например:показать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru