[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод случайно статьи из базы Wordpress
sx000

$result = mysql_query('SELECT MAX(id) FROM wp_eng_posts');
$max_id = mysql_result($result, 0);
$random_limit = mt_rand(1, $max_id);
$query = "SELECT * FROM wp_eng_posts WHERE post_status = 'publish' AND post_type = 'post' LIMIT $random_limit,1;";
$res = mysql_query($query) or die(mysql_error());
$row=mysql_fetch_assoc($res);
print_r($row);


Пытаюсь сделать случайную выборку записи из базы вордпреса, только тех которые пост, и те которые уже опубликованы. В связи с чем пользуюсь лимитом с какого по какое выводить. Оно во первых не работает во вторых я думаю оно будет сильно нагружать базу такая конструкция. По ID так круто но посты есть некоторые как черновики и не паблишинг. Прошу помощи :)
Игорь_Vasinsky
ORDER BY RAND() добавь, а то случайностью не пахнет.

и не псыкай. одну строчку из БД хватануть - это ещё не ддос атака.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sx000
ORDER BY RAND() да прочитал про это пишут нагибиает серваки и очень хорошо так
Игорь_Vasinsky
biggrin.gif нагибают серваки - криворукие програмисты, а не синтаксис SQL

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sx000
http://blog.dimok.ru/order-by-rand-kladet-servak ну вот собственно нашел в сети и еще много таких упоминаний что данный вариант работает крайне прожорливо. Может ка кто с моим вариантом поколодвать? ORDER BY RAND() это я к стати сразу заюзал, но вот отказался в связи с прочетным.
Игорь_Vasinsky
зачем ты мне какой то блог димок кажешь))) http://www.mysql.ru/docs/man/Mathematical_functions.html

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sx000
ну просто это не единственное упоминание о том что данная выборка может практически умножить LA на сервере. А это дал ну так что первое в гугле вывалилось smile.gif
Хотелось бы решить мою задачу другими средствами. rolleyes.gif
Игорь_Vasinsky
убираешь LIMIT - получаешь все в индекно-ассоциативный массив (1й уровень индексы)

array_rand() этого массива

хотя у тя на подобии и сразу в SQL

Цитата
  $max_id = mysql_result($result, 0);
    $random_limit = mt_rand(1, $max_id);


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sx000
да все верно только оно почему то у меня

$result = mysql_query('SELECT MAX(id) FROM wp_eng_posts');
$max_id = mysql_result($result, 0);
$random_limit = mt_rand(1, $max_id);
$query = "SELECT * FROM wp_eng_posts WHERE post_status = 'publish' AND post_type = 'post' LIMIT $random_limit;";
$res = mysql_query($query) or die(mysql_error());
$row=mysql_fetch_assoc($res);
print_r($row);

выдает всегда первую строку из таблицы. Хотя их там всего 6, 5 из которых post_status = 'publish' AND post_type = 'post' вот и надо выбрать из пяти этих
SlavaFr
Цитата (Игорь_Vasinsky @ 7.11.2012 - 09:11)
убираешь LIMIT - получаешь все в индекно-ассоциативный массив (1й уровень индексы)

array_rand() этого массива

хотя у тя на подобии и сразу в SQL

Цитата
  $max_id = mysql_result($result, 0);
    $random_limit = mt_rand(1, $max_id);

в масив все загонять, может при большой таблице плохо окончится

вариант с двумя запросами
1) щитаем количество строк посредством count() в SQL
2) в пхп выбераем случайную позицию $pozicija=rand (0 ,$kolichestvo_strok);
3) цепляем в лимит
  LIMIT 1 OFFSET  $pozicila


_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
sx000
не как, кол-во строк не прокатит, в таблице надо работать тоько с теми кто post_status = 'publish' AND post_type = 'post' а там есть и другие же, типа драфт ... и другие варианты, надо тока посты выбрать именно паблишинг post_status = 'publish' AND post_type = 'post'
SlavaFr
Цитата (sx000 @ 7.11.2012 - 12:46)
не как, кол-во строк не прокатит, в таблице надо работать тоько с теми кто post_status = 'publish' AND post_type = 'post'

А кто мешает это условие при подщете строк применить?
SELECT count(*) FROM wp_eng_posts WHERE post_status = 'publish' AND post_type = 'post'

Принцип работы вообще то понятен? Если нет, я попытаюсь досканально объяснить.


_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
sx000
смотрите:
подсчет идет линейный же те 123456... Допусти мы посчитали что в выборке скажем есть 10 строк, мы не знаем же их ключи так как договорились не брать в массив большую таблицу данных. Теперь мы делаем скажем выборку с рандомным числом и тут он может выести скажем строку которая не соответствует post_status = 'publish' AND post_type = 'post'.
SlavaFr
Цитата (sx000 @ 7.11.2012 - 13:21)
смотрите:
подсчет идет линейный же те 123456... Допусти мы посчитали что в выборке скажем есть 10 строк, мы не знаем же их ключи так как договорились не брать в массив большую таблицу данных. Теперь мы делаем скажем выборку с рандомным числом и тут он может выести скажем строку которая не соответствует post_status = 'publish' AND post_type = 'post'.

да нам ключи вообще не нужны.
Нужно только
1) знать сколько имеется строк $Х которые совподают с нашим $Условием
2) сгенерировать случайное число $offset которое находится между 0 и $Х
3) вывести одну строку с условием соответствующим $Условием в OFFSET $offset
имменно так, как я уже показал.

Другими словами
1)
SELECT count(*) as X FROM wp_eng_posts WHERE post_status = 'publish' AND post_type = 'post'

2) $offset= rand(0, $X );

3) SELECT * FROM wp_eng_posts WHERE post_status = 'publish' AND post_type = 'post' LIMIT 1 OFFSET $offset

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.