Реклама на сайте Advertise with us

Вопрос по составлению sql запроса.

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

SexBlogs.Name

С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962

Ссылка на сообщениеДобавлено: 03/04/08 в 17:36       Ответить с цитатойцитата 

В базу mysql забиты урлы сайтов.
Можно ли составить запрос таким образом что бы из 100 имеющихся выбрать скажем 5 случайным образом?
Код:
$sites = mysql_query("SELECT * FROM sites");

Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!

0
 



С нами с 03.07.05
Сообщения: 474
Рейтинг: 231

Ссылка на сообщениеДобавлено: 03/04/08 в 17:40       Ответить с цитатойцитата 

Можно. Используя Limit и Rand. Но не советую так делать, так как Rand уж очень сильно грузит мускуль. Особенно при больших таблицах. Поэтому лучше выбирать случайно через php.

SELECT `url` FROM `urls` ORDER BY RAND LIMIT 5

PROMO!!! Free Dedicated servers! Send me PM.
Dedicated servers in Europe (DE,NL,RO) and USA from 39$.

6
 



С нами с 03.07.05
Сообщения: 474
Рейтинг: 231

Ссылка на сообщениеДобавлено: 03/04/08 в 17:41       Ответить с цитатойцитата 

Для php:
array_rand — Выбрать одно или несколько случайных значений из массива

PROMO!!! Free Dedicated servers! Send me PM.
Dedicated servers in Europe (DE,NL,RO) and USA from 39$.

6
 

SexBlogs.Name

С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962

Ссылка на сообщениеДобавлено: 03/04/08 в 17:43       Ответить с цитатойцитата 

для пхп всмысле выгрузить результат в массив и уже потом рэндомно выдергивать? какой то кривой вариант

п.с. а вообще наверное так и сделаю, вначале получу айдишники записей в массив, а потом уже выдернув случайные номера сделаю новый запрос

биг сэнкс за помощь
smail44.gif

Последний раз редактировалось: Lamagro (03/04/08 в 17:50), всего редактировалось 1 раз

Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!

0
 



С нами с 03.07.05
Сообщения: 474
Рейтинг: 231

Ссылка на сообщениеДобавлено: 03/04/08 в 17:49       Ответить с цитатойцитата 

Lamagro писал:
для пхп всмысле выгрузить результат в массив и уже потом рэндомно выдергивать? какой то кривой вариант


Кривой - но будет работать быстрее на больших таблицах. А вообще кто мешает попробовать оба? ;)

PROMO!!! Free Dedicated servers! Send me PM.
Dedicated servers in Europe (DE,NL,RO) and USA from 39$.

6
 

продаю базы адалт кейвордов

С нами с 09.11.02
Сообщения: 9045
Рейтинг: 3772


Передовик Master-X (16.05.2004) Передовик Master-X (01.06.2004)
Ссылка на сообщениеДобавлено: 03/04/08 в 17:50       Ответить с цитатойцитата 

select sites.*,rand() as ordf from sites order by ordf limit 0,5

сдам подпись, стучите в личку

6
 

php

С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410


Передовик Master-X (16.01.2010)
Ссылка на сообщениеДобавлено: 03/04/08 в 17:55       Ответить с цитатойцитата 

netzoner писал:
Для php:
array_rand — Выбрать одно или несколько случайных значений из массива

в таком случае нужно вносить в массив все значения из базы, а это может оказатся не очень при больших объемах.

IPhosters.com - любые решения для Вас (виртуалы от $4.99, vps от $11.99, дедики от $95)

6
 

SexBlogs.Name

С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962

Ссылка на сообщениеДобавлено: 03/04/08 в 17:55       Ответить с цитатойцитата 

ivango писал:
select sites.*,rand() as ordf from sites order by ordf limit 0,5
smail10.gif неврубился

Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!

0
 

SexBlogs.Name

С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962

Ссылка на сообщениеДобавлено: 03/04/08 в 17:57       Ответить с цитатойцитата 

_s_[sov] писал:
в таком случае нужно вносить в массив все значения из базы, а это может оказатся не очень при больших объемах.
потому он кривым и кажется

Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!

0
 

продаю базы адалт кейвордов

С нами с 09.11.02
Сообщения: 9045
Рейтинг: 3772


Передовик Master-X (16.05.2004) Передовик Master-X (01.06.2004)
Ссылка на сообщениеДобавлено: 03/04/08 в 17:59       Ответить с цитатойцитата 

Lamagro писал:
smail10.gif неврубился


чего не врубился?
Это запрос, который выдает из таблицы sites 5 записей случайным образом... я его проверил, работает.

сдам подпись, стучите в личку

6
 

SexBlogs.Name

С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962

Ссылка на сообщениеДобавлено: 03/04/08 в 18:04       Ответить с цитатойцитата 

ivango писал:
чего не врубился?
Это запрос, который выдает из таблицы sites 5 записей случайным образом... я его проверил, работает.

у меня тоже работает icon_smile.gif
а что не врубился - опыта маловато - сижу с синтаксисом разбираюсь

Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!

0
 

SexBlogs.Name

С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962

Ссылка на сообщениеДобавлено: 03/04/08 в 18:06       Ответить с цитатойцитата 

да кстати - спасибо за помощь icon_smile.gif

Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!

0
 

« ... full on ... »

С нами с 17.03.07
Сообщения: 670
Рейтинг: 1686

Ссылка на сообщениеДобавлено: 03/04/08 в 19:15       Ответить с цитатойцитата 

На заметку, добавлю - ORDER BY RAND довольно ресурсоёмкий уже при сравнительно небольшом кол-ве записей, а также при большом кол-ве соединений.
C другой стороны, при тех же показателях (кол-во записей и запросов) целый лишний запрос + засор памяти (кучей IDшников) тож не лучший вариант.
В идеале можно сделать, чтобы ID всех сайтов хранилось в переменной в виде массива, периодически обновляясь, а оттуда уже через array_rand выбирались ID, потом запрос к базе через WHERE ID IN (1,23,435,21,9).

Правда, это всё проблемы больших объёмов и нагрузок, а так оба первых варианта хороши, только с ORDER BY RAND мороки меньше.

6
 

саблезубый кролик

С нами с 02.07.05
Сообщения: 2966
Рейтинг: 993

Ссылка на сообщениеДобавлено: 03/04/08 в 20:10       Ответить с цитатойцитата 

Код:

$maxid=mysql_fetch_field(mysql_query('select max(id) as maxid from sites'));
for($i=0;$i<=4;$i++) {
$siteid[]=rand(1,$maxid)
}
$ids=implode(',',$siteid);
$result=mysql_query("select * from sites where id IN ($ids)"));


так пооптимальней будет если нету пропусков в таблице.

.

6
 



С нами с 26.02.03
Сообщения: 2366
Рейтинг: 987

Ссылка на сообщениеДобавлено: 03/04/08 в 22:36       Ответить с цитатойцитата 

Lamagro писал:
п.с. а вообще наверное так и сделаю, вначале получу айдишники записей в массив, а потом уже выдернув случайные номера сделаю новый запрос
Самый оптимальный вариант.

6
 

саблезубый кролик

С нами с 02.07.05
Сообщения: 2966
Рейтинг: 993

Ссылка на сообщениеДобавлено: 04/04/08 в 00:12       Ответить с цитатойцитата 

Это с каких пор дергать сто строк стало оптимальнее чем одну max по primary ключу? smail10.gif

.

6
 

SexBlogs.Name

С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962

Ссылка на сообщениеДобавлено: 04/04/08 в 06:05       Ответить с цитатойцитата 

Gourad писал:
так пооптимальней будет если нету пропусков в таблице.
В том то и дело что пропуски есть, с базой работают - что то удаляют что то добавляют и таким образом запросто можно нарваться на несуществующий элемент. А в массив делать всетаки не очень хотелось бы... количество записей в таблице будет увеличиваться, а выбирать нужно примерно постоянное число

Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!

0
 

саблезубый кролик

С нами с 02.07.05
Сообщения: 2966
Рейтинг: 993

Ссылка на сообщениеДобавлено: 04/04/08 в 13:10       Ответить с цитатойцитата 

Lamagro писал:
А в массив делать всетаки не очень хотелось бы... количество записей в таблице будет увеличиваться, а выбирать нужно примерно постоянное число

Как вариант, сделай дополнительный индекс без пропусков, и перестраивай при удалении по триггеру AFTER DELETE. Конешно это не совсем правильно с точки зрения нормализации, но лучше чем выдирать 100К записей в массив который потом сортировать.

.

6
 

SexBlogs.Name

С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962

Ссылка на сообщениеДобавлено: 06/04/08 в 06:27       Ответить с цитатойцитата 

пока сделал через массив - увеличится нагрузка - буду думать
спасибо за помощь
smail44.gif

Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »