Выбор из двух таблиц

Grapefruit Lips

Новичок
Выбор из двух таблиц

В таблицу pictures вводятся данные (userid, thumb, date )
у каждого "userid" есть возможность *загрузить* в таблицу до 10 фотографий, т.е. может быть и так:

id ..... userid ..... thumb ..... date

30 ..... 2 ..... pictures/thumbs/2_1.jpg 2006-01-23
31 ..... 2 ..... pictures/thumbs/2_2.jpg 2006-01-23
32 ..... 2 ..... pictures/thumbs/2_3.jpg 2006-01-23
18 ..... 1 ..... pictures/thumbs/1_1.jpg 2006-01-23

Мне надо из таблицы 'users' взять 'username' с 'userid' из таблицы 'pictures'
и показать случайным образом все картинки, у которых один 'userid' в таблице 'pictures'

Другими словами, если 8 человек загрузили по 5 фотографий (или 4)
То надо показать эти 8 картинок, каждую из тех 5-и (или 4-х) случайным образом (random) =)

Я не могу понять как это сделать.
Всё что у меня выходит, это только выводятся эти 8 картинок. Да, все разные, но не меняются при обновлении
Т.е. надо, чтобы если юзер загрузил, например 6 картинок, то при обновлении ЕГО картинки менялись, т.е. каждого юзера (его userid)
PHP:
$sio_bee = "SELECT
   pictures.userid AS userid,
   pictures.date AS date,
   pictures.thumb AS thumb,
   users.username AS username,
   users.id AS id
FROM pictures
LEFT JOIN users 
ON ( users.id = pictures.userid)
GROUP BY users.id
ORDER BY RAND()
ASC";
 

Necromant

Новичок
ничего не понимаю
[sql]
SELECT
DISTINCT(pictures.userid), pictures.*
FROM pictures
ORDER BY pictures.userid, pictures.date DESC
[/sql]
 

serglt

Анус, ой, Ахтунг
Попробуй вот так
SELECT
pictures.userid AS userid,
pictures.date AS date,
pictures.thumb AS thumb,
users.username AS username,
users.id AS id, RAND() AS rnd
FROM pictures
LEFT JOIN users
ON ( users.id = pictures.userid)
GROUP BY users.id
ORDER BY rnd
ASC";
 

Grapefruit Lips

Новичок
serglt поменялись картинки у юзеров, но при следующим обновлении остаются те же, на что поменялись. меняются местами сами юзеры, рандомом, а не их картинки, т.е. как у меня и было =(
 

serglt

Анус, ой, Ахтунг
GROUP BY Убери :) и измени ORDER BY userid, rnd. И выводи в цикле ток по одной для каждого узера. Правда чем больше картинок тем медленнее скрипт работает
 

Grapefruit Lips

Новичок
блин, так я думал можно как то с thumb поработать, чтобы она случайным образом выбиралась прямо в запросе для одного userid

А как вывести по одной для каждого юзера? Я новичок в mysql =)
 

serglt

Анус, ой, Ахтунг
Это надо делать в PHP
PHP:
$uid = "";
$result = array ();
while ($row = mysql_fetch_row ($res))
{
    if ($row [0] != $uid)
    {
         $uid = $row [0];
         $result [] = $row; 
    }
}
print_r ($result);
 

Grapefruit Lips

Новичок
ан нет, не всё, теперь не правильно выводит по страницам
$per_page_limit = 1;
$limitvalue = $page*$per_page_limit-($per_page_limit);

"select .. from ...... LIMIT $limitvalue, $per_page_limit";

выводится всё, что в таблице... т.е. на каждой следующей странице будет один и тот же юзер с его рандомными картинками, пока его userid не сменится на userid следующего....
ведь у каждого 'userid' может быть до 10 записей.
как это обозначить? что бы в $limitvalue он считал только уникальные 'userid' , которые не повторяются.


для вывода страниц я это сделал вот так:
PHP:
 $totalrows= mysql_num_rows(mysql_query("
select pictures.userid AS userid,
users.id AS id 
FROM pictures 
LEFT JOIN users 
ON ( users.id = pictures.userid) 
GROUP BY users.id"));
и всё нормально, но как это обозначить в $limitvalue?


ставлю GROUP BY userid ORDER BY thumb,rnd
всё нормально, но картинки не рандомятся...
блин, либо так, либо никак... не понятно


кароче вообще, анрил...
т.к. фотки юзверей записываются как "userid_номерфото.jpg" извратился и написал вот это:

PHP:
$ext = substr($row['thumb'], 1 + strrpos($row['thumb'], ".")); 
$theimgfile="pictures/thumbs/".$row['id']."_".rand(1, 10).".".$ext;
if(file_exists($theimgfile)) {
$theimgfile=$theimgfile;
}else {
$theimgfile="pictures/thumbs/".$row['id']."_1.".$ext;
}
//можно сделать rand(1, $total_users_pics); 
//где $total_users_pics кол-во всех его фоток
но я думаю это всё не правильно, изврат...
не знаю как правильно...
 
Сверху