2013-06-14 3 views
1
SELECT `bid_amount`,`valid_until`, min('bid_amount') as `lowest_bid` 
    `cf1`.`country_name` AS `country_from`, `rq`.`city_from`, 
    `cf2`.`country_name` AS `country_to`, `rq`.`city_to`, 
    `sub_cat`.`sub_cat_name`, 
    `cat`.`cat_name` 
    FROM `bids` 
    JOIN `request_quote` `rq` ON `bids`.`bid_for` = `rq`.`quoteid` 
    JOIN `countries` `cf1` ON `rq`.`country_from` = `cf1`.`country_id` 
    JOIN `countries` `cf2` ON `rq`.`country_to` = `cf2`.`country_id` 
    LEFT JOIN `cat` ON `rq`.`cat` = `cat`.`cat_id` 
    LEFT JOIN `sub_cat` ON `rq`.`sub_cat` = `sub_cat`.`sub_cat_id` 
    WHERE `bids`.`bid_by` = $bidderId GROUP BY `bids`.`bid_amount` 

Так что я работаю над этим видом аукциона. То, что мне нужно вернуть, - это все ставки конкретного пользователя, а также дополнительная информация о каждой ставке.SQL-соединение с другим предложением «где», чем остальная часть запроса?

Одна часть информации, которую я хочу, является самой низкой ставкой на каждый предмет. Итак, вот таблица ставок. 'bid_for` ссылается на элемент, для которого ставка. Поэтому я хочу получить этот «min (bid_amount)», на который ссылается «where bid_for = x». Но, как вы видите в последней строке, у меня уже есть предложение WHERE, которое ссылается на него по идентификатору пользователя.

Итак, так или иначе, чтобы выбрать одну (или более) часть информации, на которую ссылается другая фраза «где», чем остальная часть запроса? (Если это имеет смысл)

+--------+--------+---------+------------+-------------+---------------+-------------+ 
| bid_id | bid_by | bid_for | bid_amount | pickup_date | delivery_date | valid_until | 
+--------+--------+---------+------------+-------------+---------------+-------------+ 
|  1 |  24 |  2 |  19.99 | 2013-06-01 | 2013-06-01 | 2013-06-01 | 
|  2 |  27 |  2 |  25.00 | 2013-06-01 | 2013-06-01 | 2013-06-01 | 
+--------+--------+---------+------------+-------------+---------------+-------------+ 
+0

Эксплуатация AND и оператор? то есть «WHERE blah = blah AND blah = blah' – adaam

+0

@adaam Извините, я, вероятно, недостаточно хорошо себя проявил. Это значение min должно быть указано ТОЛЬКО bid_for (как при получении самой низкой ставки для этого элемента у всех пользователей, а не только для меня) – galdikas

+0

Что вы разрабатываете отдельно от SQL (PHP, .NET?) – adaam

ответ

1

Вы можете сделать это с помощью внутреннего оператора выбора:

SELECT `bid_amount`,`valid_until`, (SELECT min('bid_amount') FROM 'bids') as `lowest_bid` 
`cf1`.`country_name` AS `country_from`, `rq`.`city_from`, 
`cf2`.`country_name` AS `country_to`, `rq`.`city_to`, 
`sub_cat`.`sub_cat_name`, 
`cat`.`cat_name` 
FROM `bids` 
JOIN `request_quote` `rq` ON `bids`.`bid_for` = `rq`.`quoteid` 
JOIN `countries` `cf1` ON `rq`.`country_from` = `cf1`.`country_id` 
JOIN `countries` `cf2` ON `rq`.`country_to` = `cf2`.`country_id` 
LEFT JOIN `cat` ON `rq`.`cat` = `cat`.`cat_id` 
LEFT JOIN `sub_cat` ON `rq`.`sub_cat` = `sub_cat`.`sub_cat_id` 
WHERE `bids`.`bid_by` = $bidderId GROUP BY `bids`.`bid_amount` 
+0

Круто это работает. Полагаю, я приму свой ответ, так как прием моих собственных не выглядел бы хорошо. Но для тех, кто смотрит на это, знайте, что оба ответа выполняют эту работу! Так что, наверное, просто предпочтение синтаксиса ... :) – galdikas

0

Хорошо придумали решение сам. Я наложил псевдоним на таблицу bids и присоединил ее к таблице с неалиасом bids. Вроде так:

SELECT `bids`.`bid_amount`,`bids`.`valid_until`, 
    min(`min`.`bid_amount`) AS `lowest_bid`, 
    `cf1`.`country_name` AS `country_from`, `rq`.`city_from`, 
    `cf2`.`country_name` AS `country_to`, `rq`.`city_to`, 
    `sub_cat`.`sub_cat_name`, 
    `cat`.`cat_name` 
    FROM `bids` 
    JOIN `request_quote` `rq` ON `bids`.`bid_for` = `rq`.`quoteid` 
    JOIN `bids` `min` ON `min`.`bid_for` = `rq`.`quoteid` 
    JOIN `countries` `cf1` ON `rq`.`country_from` = `cf1`.`country_id` 
    JOIN `countries` `cf2` ON `rq`.`country_to` = `cf2`.`country_id` 
    LEFT JOIN `cat` ON `rq`.`cat` = `cat`.`cat_id` 
    LEFT JOIN `sub_cat` ON `rq`.`sub_cat` = `sub_cat`.`sub_cat_id` 
    WHERE `bids`.`bid_by` = $bidderId GROUP BY `bids`.`bid_for` 

Даже не знал, что вы можете присоединиться к одному и тому же столу на одном столе. Но здесь вы идете, живете и учитесь :)

Смежные вопросы