1 (изменено: smircea, 2011-07-21 01:37:12)

Тема: Помогите составить запрос

Такой вопросик. Подскажите кто сможет.
Значит такая ситуация.
В определенное место форума, нужно вывести картинку рендомного лота с аукциона.
Причем структура таблиц аукциона следующая

таблица лотов аукциона
php_auctions

нужное мне полеauction_id   (+ там есть еще поля, которые  нужны при формировании ссылки ( название лота, его цена и т.д., и это все содержится в этой табличке и выводится через select * from )

таблица лотов аукциона
php_auctions
структура
+----------+-
|auction_id
+----------+-
| ____10               |
| ____20   
| ____20              |
+---+-------+


И таблица с изображениями аукциона
php_auction_media

+------------+--------------------+---------------------------------------+
|auction_id |_______media_id | ___________media_url ________|
+------------+--------------------+---------------------------------------+
|______ 10 |  ___________ 1  |  ссылка 1 на картинку для  аука 10  |
|______ 10 |  ___________ 2  |  ссылка 2 на картинку для аука 10   |
|______ 20 |  ___________ 3  |  ссылка 1 на картинку для аука 20   |
|______ 20 |  ___________ 4  |  ссылка 2 на картинку для аука 20   |
|______ 30 |  ___________ 5  |  ссылка 1 на картинку для аука 30   |
|______ 30 |  ___________ 6  |  ссылка 2 на картинку для аука 30   |
|______ 30 |  ___________ 7  |  ссылка 3 на картинку для аука 30   |
--------------------------------------------------------------------------
----
ТО есть, Во второй таблице есть ай ди аукциона, а также ай ди картинки к этому аукциону,  ну и ссылка на эту картинку.
Так как картинок может быть несколько, для одного аукциона, то поэтому и введено поле media_id,.
Мне эту ссылку + еще парочку полей нужно вывести на форум . Притом аукцион выбирать ренлдомно.
Ну сие сделать не мудрено

$getRandomAuctions=mysql_query("SELECT *
FROM php_auctions, php_auction_media 
WHERE  
php_auctions.auction_id = php_auction_media.auction_id  

ORDER BY rand() DESC LIMIT 0,1");
     while ($randAuctions = mysql_fetch_array($getRandomAuctions)) {

 if ( $randAuctions['max_bid'] == "0.00"){
            $price = $randAuctions['start_price'];
        }
        else {
           $price = $randAuctions['max_bid'];
        }
        if ( $randAuctions['media_url'] == ""){
            $pic = "clear.gif ";
        }
        else {
                $pic = '<a href="auction_details.php?&auction_id=' .$randAuctions['auction_id']. '" TARGET="_blank"><img  src="thumbnail.php?pic=' . $randAuctions['media_url'] . '&w=70&sq=Y&b=Y" alt="' . $randAuctions['name'] . '" title="' . $randAuctions['name'] . '  #' . $price . ' ' . $randAuctions['currency'] . '"></a>';

        }

ну и потом в нужном месте форума я просто вызываю  $pic
все отлично работает.
Но как обычно есть одно но. Дело в том, что для одного аукциона полей media_url может быть несколько т.к. аукцион может иметь несколько картинок. И бывает что не всегда выводится картинка которая нужна. ( не первая загруженная для аукциона, а вторая или третья и т.д. ) Что бы этого избежать надо задать условие, что бы при выборке значения из поля media_url, бралось значение media_url равное наименьшему значению media_id  , для этого аука...
ТО есть на примере таблицы сверху, для аукциона с id = 20, мне нужно наименьшее значение  media_id для этого аукциона, а именно media_id = 3 и ссылку "ссылка 1 на картинку для аука 20 ".
Очень часто бывает что выводится не наименьшее значение, а любое другое. То есть к примеру media_id = 4 и ссылка уже неподходит.
Пробовал таким запросом

getRandomAuctions1=mysql_query("SELECT * 
FROM php_auctions, php_auction_media 
WHERE  
media_url=(SELECT MIN(php_auction_media.media_id)
              FROM php_auction_media 
              WHERE php_auctions.auction_id =php_auction_media.auction_id)
AND
php_auctions.auction_id = php_auction_media.auction_id  

ORDER BY rand() DESC LIMIT 0,1");

и ничего не получилось. подскажите пожалуйста. как выйти из ситуации

2

Re: Помогите составить запрос

Разбейте на два запроса, одним выберите из таблицы php_auctions рандомную запись, а вторым выберите из php_auction_media записи отсортировав по полю media_id с "LIMIT 1".

Два запроса не всегда хуже, чем один. smile

3 (изменено: smircea, 2011-07-21 13:47:59)

Re: Помогите составить запрос

можете помочь? покажите пример как это сделать....  уже голова идет кругом,  просто...

4

Re: Помогите составить запрос

Hanut сказал:

Разбейте на два запроса, одним выберите из таблицы php_auctions рандомную запись,

это понятно.

Hanut сказал:

а вторым выберите из php_auction_media записи отсортировав по полю media_id с "LIMIT 1".

а вот тут вопрос,  я выбиру записи с сортировкой по наименьшему значению поля media_id , но мне это нужно как то связать с первым запросом, что бы ай ди аукционов соответствовали в обоих выборках друг другу...
Сам боюсь не справлюсь. подскажите пожаалуйста.

5

Re: Помогите составить запрос

Первый запрос остается таким же, только для одной таблицы. Результатом его выполнения будет строка с полем auction_id, значение которого можно поместить в переменную $auction_id.

$getRandomAuctions=mysql_query("SELECT *
FROM php_auctions
ORDER BY rand() DESC LIMIT 1");

Второй запрос.

$getMedia = mysql_query("SELECT *
FROM php_auction_media
WHERE auction_id = ' . $auction_id . '
ORDER BY media_id LIMIT 1");

6 (изменено: smircea, 2011-07-21 15:37:06)

Re: Помогите составить запрос

сделал так но результата не получил

$getRandomAuctions=mysql_query("SELECT *
FROM probid2_auctions

ORDER BY rand() DESC LIMIT 1");
while ($randAuctions = mysql_fetch_array($getRandomAuctions)) {
  $auction_id = $randAuctions['auction_id'];
}


$getMedia = mysql_query("SELECT *
FROM probid2_auction_media
WHERE auction_id = ' . $auction_id . '
ORDER BY media_id LIMIT 1");

    while ($media = mysql_fetch_array($getMedia)) {

        if ( $media['media_url'] == ""){
            $pic = "clear.gif ";
        }
        else {
    $pic = '<img  src="http://www.sobiratel.net/au/thumbnail.php?pic=' . $media['media_url'] . '&w=70&sq=Y&b=Y"></a>';
        }
}

если во втором запросе строку  WHERE auction_id = ' . $auction_id . ' поменять на
WHERE probid2_auctions.auction_id = probid2_auction_media.auction_id
то картинка отображается, но без рендома, так как не подключено условия рендома первого запроса. Это и понятно. Насколько я понимаю, я где то ошибся, и нужные значения из первого запроса не попадают во второй.

7

Re: Помогите составить запрос

Сделайте перехват значения переменной $auction_id после выполнения первого запроса.
exit($auction_id);

8

Re: Помогите составить запрос

а как это корректно сделать
сделал следующим образом

$getRandomAuctions=mysql_query("SELECT *
FROM probid2_auctions
ORDER BY rand() DESC LIMIT 1");
while ($randAuctions = mysql_fetch_array($getRandomAuctions)) {
  $auction_id = $randAuctions['auction_id'];
  exit($auction_id);
}


$getMedia = mysql_query("SELECT *
FROM probid2_auction_media
WHERE auction_id = ' . $auction_id . '
ORDER BY media_id LIMIT 1");

и получил просто вывод числа id и больше ничего

9

Re: Помогите составить запрос

Теперь полученное число id вставьте во второй запрос и выполните его в phpMyAdmin, чтобы убедиться, что возвращаются результаты.

10

Re: Помогите составить запрос

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

11

Re: Помогите составить запрос

Вроде вы все сделали, надо только данные из второго запроса разобрать.

$getRandomAuctions=mysql_query("SELECT *
FROM probid2_auctions
ORDER BY rand() DESC LIMIT 1");
while ($randAuctions = mysql_fetch_array($getRandomAuctions)) {
  $auction_id = $randAuctions['auction_id'];
}

$getMedia = mysql_query("SELECT *
FROM probid2_auction_media
WHERE auction_id = ' . $auction_id . '
ORDER BY media_id LIMIT 1");
while ($row = mysql_fetch_array($getMedia)) {
    echo $row['media_url'];
}

12

Re: Помогите составить запрос

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

$getRandomAuctions=mysql_query("SELECT *
FROM probid2_auctions
ORDER BY rand() DESC LIMIT 1");
while ($randAuctions = mysql_fetch_array($getRandomAuctions)) {
  $auction_id = $randAuctions['auction_id'];
}

$getMedia = mysql_query("SELECT *
FROM probid2_auction_media
WHERE auction_id = ' . $auction_id . '
ORDER BY media_id LIMIT 1");
while ($row = mysql_fetch_array($getMedia)) {
    echo $row['media_url'];
}
    $pic = '<img  src="thumbnail.php?pic=' .  $row['media_url'] . '&w=70&sq=Y&b=Y"></a>';

картинка не найдена, так как ссылка обрабатывается без media_url
www.sait.net/thumbnail.php?pic=&w=70&sq=Y&b=Y

13

Re: Помогите составить запрос

А какие данные у вас в поле media_url?

14

Re: Помогите составить запрос

ссылки там.  тип поля - varchar(255)
выглядит так:
uplimg/img_A_100032_2c9a22d8cee18eb3c684b0aec448c84f.jpg

15

Re: Помогите составить запрос

Проверьте содержание переменной $row['media_url'], если она пустая, то смотрите как формируется и что возвращает запрос.