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

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

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

Здравствуйте, я только начал работать с php и хотел бы узнать код случайного вывода статей, тут нарисовал в паинте но что-то сам не знаю как реализовать. Суть в следующем, при нажатии на ссылку Случайная статья, должен делаться запрос к MySQL вывод переменных:id,title,content,data,img, и , где переменая cat для трех статей=random цифр от 1до 43, также переменая podcat=random цифр от 1до 50, и ещё если такое возможно конечно, можно ли сделать что бы повторных выводов той-же статьи не было, и например когда user пересмотрел все статьи и нажимает ещё раз Случайная статья-выходило сообщение-К сожалению, в базе данных отсутствуют новые статьи?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Миниатюры
Случайная статья  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2012, 10:43
Ответы с готовыми решениями:

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

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

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

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

Случайная выборка из базы данных
Как реализовать случайную выборку файлов на скачивание из базы данных?

11
DrobyshevAlex
1173 / 1123 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
11.06.2012, 13:02 2
Цитата Сообщение от WaRstim Посмотреть сообщение
можно ли сделать что бы повторных выводов той-же статьи не было,
Вам придётся в отдельной таблице писать ID пользователя и id статьи прочитанной.
А при выборе проверять, что бы в таблице прочитанных статей ещё было этого номера.
0
crautcher
2019 / 1991 / 463
Регистрация: 27.05.2011
Сообщений: 6,837
11.06.2012, 13:18 3
Цитата Сообщение от 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
DrobyshevAlex
1173 / 1123 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
11.06.2012, 13:25 4
Цитата Сообщение от crautcher Посмотреть сообщение
mt_rand(1,43)
какова вероятность того, что не будет не одного пропущенного ID? А если что то удалили? И выпадет число которое не с чем ен совпадёт?
функция mysql rand слишком медленная, можно тогда в 2 запроса делать.
первым выбарть все записи, что бы знать сколько их всего, потом сгенерировать число от 0 до количества - 1. и выбрать что то типа
SQL
1
SELECT ... FROM ... LIMIT $rand, 1;
соответственно если фильтровать просмотренные записи, то количество записей нужно так же брать только те которые ещё не просмотрены.
Цитата Сообщение от crautcher Посмотреть сообщение
тогда надо в сессии хранить
Тогда закройте браузер и откройте - и всё пропало. Если не в бд, то хотя бы в куках.
0
crautcher
2019 / 1991 / 463
Регистрация: 27.05.2011
Сообщений: 6,837
11.06.2012, 13:31 5
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
А если что то удалили?
рандомом мы задаём категории а не айдишники

Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
SELECT ... FROM ... LIMIT $rand, 1;
нам нужна случайная новость из случайной категории причем не выше 43 и случайной подкатегорией которая не выше 50
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
И выпадет число которое не с чем ен совпадёт?
как задали вопрос так на него и ответил , по формулеровки вопроса должно совпасть
0
DrobyshevAlex
1173 / 1123 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
11.06.2012, 13:45 6
Цитата Сообщение от 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
2019 / 1991 / 463
Регистрация: 27.05.2011
Сообщений: 6,837
11.06.2012, 13:51 7
всё отлично , но можно
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
BY id LIMIT $rand, 1
SQL
1
BY RAND() LIMIT 1
зачем пхп гонять если майскул это умеет
0
DrobyshevAlex
1173 / 1123 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
11.06.2012, 13:57 8
Цитата Сообщение от crautcher Посмотреть сообщение
зачем пхп гонять если майскул это умеет
Если в гугл вбить фразу order by rand, то будет куча статей поясняющих почему так делать не нужно.
Это работает когда у вас ну может несколько сотен статей. Когда записей много, сервер будет долго обрабатывать. Может в случае со статьями это и подойдёт, но что если проект разрастётся и таам будут тысячи записей? Потом переделывать? Может проще сразу
Мне вообщем то всё равно, я выразил своё мнение так же как Вы своё, сколько людей столько и мнений
2
crautcher
2019 / 1991 / 463
Регистрация: 27.05.2011
Сообщений: 6,837
11.06.2012, 14:01 9
Цитата Сообщение от 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
WaRstim
1 / 1 / 0
Регистрация: 30.10.2011
Сообщений: 62
11.06.2012, 14:14  [ТС] 10
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Может в случае со статьями это и подойдёт, но что если проект разрастётся и таам будут тысячи записей? Потом переделывать?
Да действительно так, рассчитывается что будет очень много статей
0
DrobyshevAlex
1173 / 1123 / 94
Регистрация: 31.05.2012
Сообщений: 3,059
11.06.2012, 14:24 11
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
WaRstim
1 / 1 / 0
Регистрация: 30.10.2011
Сообщений: 62
11.06.2012, 15:28  [ТС] 12
спасибо большое! я подумаю над всем сказанным
0
11.06.2012, 15:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2012, 15:28

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru