SQL De laagste variabele ophalen van een één-tot-veel-relatie

Ik heb nu 2 tabellen opgesteld (Banen en Biedingen). Ze zijn samengebonden door job_id, wat uniek is in de tabel Jobs, maar niet in biedingen. Ook in de tabel Jobs is locatie-informatie. Wat ik moet doen, is de laagste biedingen voor elke stad in de opdrachtentabel.

In wezen moet ik elke DISTINCT-stad grijpen en alle banen in die stad krijgen, dan alle biedingen voor de banen grijpen, ze vergelijken en de laagste halen uit al die banen.

Ik heb geprobeerd het in SQL te doen, maar het zou ook goed zijn om vooreach-lussen in PHP te gebruiken.

1
Sorry, ik gebruik MySQL 5.0.8
toegevoegd de auteur IceBlueFire, de bron

4 antwoord

JOIN the two tables, then GROUP BY city:

SELECT j.city 
    , MIN(b.amount) AS minimum_bid
FROM 
    Jobs AS j
  JOIN                          --- LEFT JOIN if you want cities 
    Bids AS b                   --- without any bid, too
      ON b.job_id = j.job_id
GROUP BY j.city
3
toegevoegd
Dit werkte als een charme, heel erg bedankt =)
toegevoegd de auteur IceBlueFire, de bron

Gebruik een subquery om te achterhalen wat de minimale biedingsbedrag is en filter op basis daarvan.

select b.*
from   job j
join   bid b
on     b.job_id = j.job_id
where  b.amount = 
       (
       select  min(b2.amount) 
       from    bid b2 
       where   b2.job_id = b.job_id
       )
1
toegevoegd

Als ik het goed begrijp, is wat u zoekt

  SELECT MIN(bids_field) 
    FROM jobs, bids
   WHERE jobs.job_id = bids.job_id 
GROUP BY location
1
toegevoegd

Mogelijk:

SELECT jobs.city, MIN(bids.bid_amount) 
FROM jobs 
LEFT JOIN bids ON bids.job_id = jobs.job_id 
GROUP BY jobs.city;
1
toegevoegd