mda, eram in graba, am uitat ca sortarea se aplica asupra rezultatelor ramase dupa WHERE/GROUP BY/etc
asa ar tb sa fie ok
Cod:SELECT MAX(id_produs), id_cat FROM t_produse GROUP BY id_cat ORDER BY MAX(id_produs) DESC LIMIT 0, 10
mda, eram in graba, am uitat ca sortarea se aplica asupra rezultatelor ramase dupa WHERE/GROUP BY/etc
asa ar tb sa fie ok
Cod:SELECT MAX(id_produs), id_cat FROM t_produse GROUP BY id_cat ORDER BY MAX(id_produs) DESC LIMIT 0, 10
queryul asta ar trebui sa functioneze doar pentru a returna lista de iduri pentru produsele cautate;
am un "bad feeling" ca nu suporta adaugarea a unei alte coloane langa (va scoate corect idurile cele mai recente din fiecare categorie, dar numele va fi in continuare al primului produs adaugat in acea categorie);
stiu ca am avut problema asta la un moment dat si solutia a fost sa fac un "select in select" ca sa o pot rezolva (un select era chiar asta si altul era un select standard pe tabela care "se hranea" cu multimea rezultata aici - parca sintaxa era cu select . from tabela where id in (select....) );
pot sa incerc o rezolvare concreta daca imi dai un fisier sql cu cateva randuri reale de tabel;
am presupus aici ca numarul de categorii din sistem este de exact 10.. alfel situatia se complica pentru ca trebuie si un limit pe undeva
intr-adevar, pt a afla totul tb subquery...
solutia asta, totul intr-un singur query e lenta pe o tabela cu mii de produse, ori se face caching la ea ori se sparge in bucati. Si nu merge pe mySQL 3.xx, parca tb macar > 4.1Cod:SELECT * FROM t_produse WHERE id_produs IN( SELECT MAX(id_produs) FROM t_produse GROUP BY id_cat) ORDER BY id_produs DESC LIMIT 0, 10
Ultima modificare făcută de Butcher; 7th June 2010 la 22:22.
Daca ai un numar fix de categorii se poate mult mai simplu :
select distinct(id_cat) as idcategorie, nume as produs, produse.id as idprodus, catname as categorie
from produse,categorii
where produse.id_cat=categorii.id
group by idcategorie
order by idprodus desc
limit 0,5
(unde 5 e numarul tau de categorii)
Evident in lista de campuri se poate adauga ce mai ai tu nevoie
Nu e corect, s-a discutat despre asta pe pagina anterioara, order by se aplica dupa where si group by. In felul asta nu afli ultimele produse adaugate...si nu am inteles ce inseamna "numar fix" de categorii.
Si inca ceva, e de evitat produsul cartezian in selecturi, e f lent.
Cod:from produse,categorii where produse.id_cat=categorii.id
Ultima modificare făcută de Butcher; 8th June 2010 la 17:18.
@gabriel_stancu - scuze...eu am inteles ca ar fi 2 tabele (asa mi se pare si mult mai logic pentru a evita redundanta datelor). Iar in cazul unei singure tabele situatia e mult mai simpla....
N-am inteles unde e problema, order by iti intoarce ultimele produse care indeplinesc criteriile respective. De fapt le sorteaza....dar intelegi ideea
Daca numarul categoriilor se va schimba in timp va trebui sa modifici si limit-ul.
Daca ai 2 tabele relationate, cum altfel scoti intr-un select campuri din ambele?
Te sfatuiesc sa incerci selectul pe un tabel real cu date, o sa vezi ca nu iti intoarce ultimele produse adaugate.
Selectul cu MAX() face ce trebuie, pe testate
In loc de produs cartezian exista LEFT/RIGHT JOIN.
Nu conteaza numarul de categorii, omul vrea ultimele 10 produse adaugate, dar sa fie din categorii distincte.
Momentan este/sunt 1 utilizator(i) care navighează în acest subiect. (0 membrii și 1 vizitatori)