[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Упорядочевание поля с рандомом
web-monster
Всем привет! Вообщем такая задача:

нужно выбрать рандомно 5 фоток упорядочив по полю prioritet, если делать rand() то как по полю упорядочить? Чтобы чередовал к примеру 30 фоток у которых максимальный приоритет.

сейчас вот так:
SELECT * FROM photo WHERE user!='ты' AND status='ok' ORDER BY rand() LIMIT 5

надо примерно так только рандомно из 30 максимальных с приоритетом
SELECT * FROM photo,options WHERE photo.user!='ты' AND photo.user=options.user AND photo.status='ok' ORDER BY options.prioritet DESC LIMIT 5

и ещё как исключить дубликат пользователей чтобы по полю user исключал дубликат , то есть выбрал только одну фотку пользователя(так как у человека может быть 20 фоток и у него приоритет просмотра самый высокий получается что будет выводится 5 его фоток для голосования что не правильно!) вот!



Спустя 6 часов, 46 минут, 43 секунды (22.04.2010 - 04:11) maxims написал(а):
по каким полям связаны photo и options?

Спустя 5 часов, 18 минут, 14 секунд (22.04.2010 - 09:29) web-monster написал(а):
поле User

Спустя 10 минут, 52 секунды (22.04.2010 - 09:40) web-monster написал(а):
Сейчас вот так выглядит всё:

$result = mysql_query("SELECT * FROM photo WHERE user!='$logname' AND status='ok' ORDER BY rand() LIMIT 5");
$id=0;
while ($row = mysql_fetch_array($result))
{
$id++;
if($id=="1")
{
mysql_query("UPDATE photo_select SET user1='$row[user]', id_photo1='$row[id]' ,photo1='$row[photo]'
WHERE logname='
$logname' AND status='non'");
}
else
if
($id=="2")
{
mysql_query("UPDATE photo_select SET user2='$row[user]', id_photo2='$row[id]' , photo2='$row[photo]'
WHERE logname='
$logname' AND status='non'");
}
else
if
($id=="3")
{
mysql_query("UPDATE photo_select SET user3='$row[user]', id_photo3='$row[id]' , photo3='$row[photo]'
WHERE logname='
$logname' AND status='non'");
}
else
if
($id=="4")
{
mysql_query("UPDATE photo_select SET user4='$row[user]', id_photo4='$row[id]' , photo4='$row[photo]'
WHERE logname='
$logname' AND status='non'");
}
else
if
($id=="5")
{
mysql_query("UPDATE photo_select SET user5='$row[user]', id_photo5='$row[id]' , photo5='$row[photo]'
WHERE logname='
$logname' AND status='non'");
}
}

Выбирается 5 случайных пользователей и записывается в базу, чтобы при дальнейшем обращении пока ты за них не проголосуешь другие не появятся.. Вот сейчас система приоритетов вводится, то есть чем больше ты посмотришь тем больше тебя (уже выщитывается), а вот запрос который выводил бы 5 фоток(с юзерами у которых максимальный приоритет, но чтобы не было в выборке несколько фоток одного юзера) не могу придумать..

Спустя 10 минут, 45 секунд (22.04.2010 - 09:50) maxims написал(а):
SELECT * FROM (SELECT * FROM photo,options WHERE photo.user!='ты' AND photo.user=options.user AND photo.status='ok' ORDER BY options.prioritet DESC) GROUP BY user LIMIT 5 


такой запрос должен дать 5 фоток с максимальным приоритетом без посторения пользователей.

Спустя 10 минут, 51 секунда (22.04.2010 - 10:01) sergeiss написал(а):
web-monster - а если ты захочешь не 5, а 20 пользователей? Так и будешь писать 20 (двадцать!!!) блоков типа
if($id=="5")
{
mysql_query("UPDATE photo_select SET user5='$row[user]', id_photo5='$row[id]' , photo5='$row[photo]'
WHERE logname='
$logname' AND status='non'");
}


Про такое понятие, как "индусский кодинг" слышал? wink.gif И про то, что надо оптимизировать код - слышал?

Спустя 6 минут, 28 секунд (22.04.2010 - 10:08) web-monster написал(а):
Цитата (maxims @ 22.04.2010 - 09:50)
SELECT * FROM (SELECT * FROM photo,options WHERE photo.user!='ты' AND photo.user=options.user AND photo.status='ok' ORDER BY options.prioritet DESC) GROUP BY user LIMIT 5 


такой запрос должен дать 5 фоток с максимальным приоритетом без посторения пользователей.


Выводит ошибку:
Every derived table must have its own alias

Спустя 2 минуты, 5 секунд (22.04.2010 - 10:10) web-monster написал(а):
Цитата (sergeiss @ 22.04.2010 - 10:01)
web-monster - а если ты захочешь не 5, а 20 пользователей? Так и будешь писать 20 (двадцать!!!) блоков типа
if($id=="5")
{
mysql_query("UPDATE photo_select SET user5='$row[user]', id_photo5='$row[id]' , photo5='$row[photo]'
WHERE logname='
$logname' AND status='non'");
}


Про такое понятие, как "индусский кодинг" слышал? wink.gif И про то, что надо оптимизировать код - слышал?

Конечно) Просто пользователей 5 максимально будет)

Спустя 2 минуты, 36 секунд (22.04.2010 - 10:12) maxims написал(а):
SELECT r.* 
FROM
(
SELECT p.*, o.prioritet
FROM photo p,options o
WHERE p.user!='ты' AND
p.user=o.user AND
p.status='ok'
ORDER BY o.prioritet DESC
) r
GROUP BY r.user
LIMIT 5

Спустя 18 минут, 29 секунд (22.04.2010 - 10:31) web-monster написал(а):
не не работает вывел следующий:

id user photo status load_time prioritet
955 031285 1260441200.jpg ok 1260441200 1
1732 10121987 1265133159.JPG ok 1265133160 0
1573 123453 1264549238.jpg ok 1264549238 1
948 159katrin 1260383296.jpg ok 1260383297 1
904 19julia95 1260113653.jpg ok 1260113653 1

хотя у некоторых пользователей приориет 4 и 5 и.т.д

Спустя 19 минут, 23 секунды (22.04.2010 - 10:50) maxims написал(а):
дай дамп БД.

Спустя 1 час, 10 минут, 38 секунд (22.04.2010 - 12:01) maxims написал(а):
попробуй так

SELECT r1.* 
FROM
(SELECT r.*
FROM
(SELECT p.*, o.prioritet
FROM photo p,options o
WHERE p.user!='ты' AND
p.user=o.user AND
p.status='ok'
ORDER BY o.prioritet DESC) r
GROUP BY r.user) r1
ORDER BY r1.prioritet DESC LIMIT 5


на большее под конец рабочего дня мой моцк не способен sad.gif

Спустя 48 минут, 1 секунда (22.04.2010 - 12:49) web-monster написал(а):
Суперски! Спасибо!!! wink.gif

SELECT r1.*
FROM
(SELECT r.*
FROM
(SELECT p.*, o.prioritet
FROM photo p,options o
WHERE p.user!='Admins' AND
p.user=o.user AND
p.status='ok'
ORDER BY rand() DESC) r
GROUP BY r.user) r1
ORDER BY r1.prioritet DESC LIMIT 5

теперь выдаются разные фотки одного пользователя)

Спустя 7 минут, 40 секунд (22.04.2010 - 12:57) web-monster написал(а):
Правда я вот не подумал что будет если найдётся 10 задротов которые будут постоянно голосовать и кто новенький зайдёт будет видеть стопятсот раз одни и те же лица)

Как вариант конечно можно на php сделать рандом, чтобы выбирался либо один запрос либо другой, один простой без всяких приоритетов а другой с приоритетами)
Быстрый ответ:

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