Încep un nou concurs în cadrul comunității noastre, prin care ofer drept premiu un cont de găzduire web de 1 GB spațiu pe disc, cu trafic nelimitat timp de un an de zile (cu mențiunea firească să nu consume excesiv resursele procesorului și să nu găzduiască activități ilegale).
Specific faptul că acest cont nu beneficiază de panoul de control cPanel, deoarece este configurat pe un server dedicat propriu și nu se justifica plata lunară a unei licențe suplimentare doar pentru acest scop.
Enunțul problemei și structura bazei de date
Avem două tabele într-o bază de date MySQL:
-- Tabela 'inregistrari'
-- Coloane: id, nume, adresa
-- Tabela 'imagini'
-- Coloane: id, subid (egal cu inregistrari.id pentru realizarea corelației între tabele), numeimagine, ordine
Pentru fiecare înregistrare din tabela inregistrari există asociate câte 4 imagini în tabela imagini.
În panoul de administrare, indiferent de ordinea în care fișierele foto au fost încărcate pe server, se poate seta ordinea de afișare pe site (în tabela imagini, valoarea numerică cea mai mică din câmpul ordine reprezintă imaginea implicită / default).
Cerința concursului
Întrebare: Care este sintaxa interogării MySQL care va returna câmpurile din tabela inregistrari împreună cu imaginea implicită (cea care are ordinea cea mai mică)?
P.S.: Interogarea pe care am conceput-o eu la un proiect anterior a fost destul de complexă, însă sunt curios să văd abordările și optimizările pe care le găsiți voi.
Primul utilizator care postează răspunsul corect și optimizat va primi premiul menționat.
P.S. 2: La încheierea concursului voi prezenta și soluția completă elaborată de mine (aici este enunțată varianta simplificată a problemei; în arhitectura mea reală existau aproximativ 4 tabele relaționate).
select in.*, im.numeimagine, min(ord) as ceva from inregistrari in
inner join imagini im on im.subid = in.id
group by in.id
nush daca mere, n-a fost testat. bft anyway. nu ma intereseaza concursul.
select p.id as id, p.ordine as ord from inregistrari i
left join poze p on i.id = p.subid
having p.ordine = (select min(ordine) from poze where subid=p.subid)
testat si pare ca merge