$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
7.11.2012 - 01:13
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
ORDER BY RAND() да прочитал про это пишут нагибиает серваки и очень хорошо так
Игорь_Vasinsky
7.11.2012 - 01:16

нагибают серваки - криворукие програмисты, а не синтаксис 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
http://blog.dimok.ru/order-by-rand-kladet-servak ну вот собственно нашел в сети и еще много таких упоминаний что данный вариант работает крайне прожорливо. Может ка кто с моим вариантом поколодвать? ORDER BY RAND() это я к стати сразу заюзал, но вот отказался в связи с прочетным.
Игорь_Vasinsky
7.11.2012 - 01:35
зачем ты мне какой то блог димок кажешь)))
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
ну просто это не единственное упоминание о том что данная выборка может практически умножить LA на сервере. А это дал ну так что первое в гугле вывалилось

Хотелось бы решить мою задачу другими средствами.
Игорь_Vasinsky
7.11.2012 - 13:11
убираешь 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
да все верно только оно почему то у меня
$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
7.11.2012 - 15:37
Цитата (Игорь_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();
не как, кол-во строк не прокатит, в таблице надо работать тоько с теми кто post_status = 'publish' AND post_type = 'post' а там есть и другие же, типа драфт ... и другие варианты, надо тока посты выбрать именно паблишинг post_status = 'publish' AND post_type = 'post'
SlavaFr
7.11.2012 - 17:05
Цитата (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();
смотрите:
подсчет идет линейный же те 123456... Допусти мы посчитали что в выборке скажем есть 10 строк, мы не знаем же их ключи так как договорились не брать в массив большую таблицу данных. Теперь мы делаем скажем выборку с рандомным числом и тут он может выести скажем строку которая не соответствует post_status = 'publish' AND post_type = 'post'.
SlavaFr
7.11.2012 - 18:37
Цитата (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();
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.