Rezultate 1 la 10 din 26

Subiect: SQL primul produs din fiecare categorie

Afișare hibrid

  1. #1
    Avatarul lui Butcher
    Butcher este deconectat Membru SeoPedia
    Reputatie:
    36
    Data înscrierii
    15th June 2007
    Locaţie
    Constanta
    Vârstă
    44
    Posturi
    308
    Putere Rep
    36


    Implicit

    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

  2. #2
    Avatarul lui Ciprian.Olaru
    Ciprian.Olaru este deconectat Membru SeoPedia
    Reputatie:
    0
    Data înscrierii
    6th August 2007
    Locaţie
    Bucuresti
    Posturi
    573
    Putere Rep
    0


    Implicit

    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


    Citat Postat în original de Butcher Vezi Post
    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

  3. #3
    Avatarul lui Butcher
    Butcher este deconectat Membru SeoPedia
    Reputatie:
    36
    Data înscrierii
    15th June 2007
    Locaţie
    Constanta
    Vârstă
    44
    Posturi
    308
    Putere Rep
    36


    Implicit

    Citat Postat în original de gabriel.stancu Vezi Post
    queryul asta ar trebui sa functioneze doar pentru a returna lista de iduri pentru produsele cautate
    intr-adevar, pt a afla totul tb subquery...

    Cod:
    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
    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.1
    Ultima modificare făcută de Butcher; 7th June 2010 la 22:22.

  4. #4
    Avatarul lui resahc
    resahc este deconectat Membru SeoPedia
    Reputatie:
    37
    Data înscrierii
    9th February 2007
    Locaţie
    Iasi
    Posturi
    149
    Putere Rep
    37


    Implicit

    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

  5. #5
    Avatarul lui Ciprian.Olaru
    Ciprian.Olaru este deconectat Membru SeoPedia
    Reputatie:
    0
    Data înscrierii
    6th August 2007
    Locaţie
    Bucuresti
    Posturi
    573
    Putere Rep
    0


    Implicit

    da, poate e mai simplu daca sunt doua tabele (produse si categorii), dar eu intelesesem din enunt ca ar fi una singura ce contine toata informatia

    Citat Postat în original de resahc Vezi Post
    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

  6. #6
    Avatarul lui Butcher
    Butcher este deconectat Membru SeoPedia
    Reputatie:
    36
    Data înscrierii
    15th June 2007
    Locaţie
    Constanta
    Vârstă
    44
    Posturi
    308
    Putere Rep
    36


    Implicit

    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
    Citat Postat în original de resahc Vezi Post
    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
    Ultima modificare făcută de Butcher; 8th June 2010 la 17:18.

  7. #7
    Avatarul lui resahc
    resahc este deconectat Membru SeoPedia
    Reputatie:
    37
    Data înscrierii
    9th February 2007
    Locaţie
    Iasi
    Posturi
    149
    Putere Rep
    37


    Implicit

    @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....

    Citat Postat în original de Butcher Vezi Post
    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...
    N-am inteles unde e problema, order by iti intoarce ultimele produse care indeplinesc criteriile respective. De fapt le sorteaza....dar intelegi ideea

    Citat Postat în original de Butcher Vezi Post
    si nu am inteles ce inseamna "numar fix" de categorii.
    Daca numarul categoriilor se va schimba in timp va trebui sa modifici si limit-ul.

    Citat Postat în original de Butcher Vezi Post
    Si inca ceva, e de evitat produsul cartezian in selecturi, e f lent.
    Cod:
    from produse,categorii
    where produse.id_cat=categorii.id
    Daca ai 2 tabele relationate, cum altfel scoti intr-un select campuri din ambele?

  8. #8
    Avatarul lui Butcher
    Butcher este deconectat Membru SeoPedia
    Reputatie:
    36
    Data înscrierii
    15th June 2007
    Locaţie
    Constanta
    Vârstă
    44
    Posturi
    308
    Putere Rep
    36


    Implicit

    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.

Informații subiect

Utilizatori care navighează în acest subiect

Momentan este/sunt 1 utilizator(i) care navighează în acest subiect. (0 membrii și 1 vizitatori)

Thread-uri Similare

  1. Recomandare CMS prezentare produs
    De RoManiac în forumul Comert electronic, e-Commerce
    Răspunsuri: 7
    Ultimul Post: 16th February 2010, 16:48
  2. Cum pun un produs sa apara in 2 subcategorii diferite ?
    De evolution în forumul Client side
    Răspunsuri: 6
    Ultimul Post: 3rd March 2009, 15:44
  3. SEO produs software
    De ddines în forumul Locuri de munca
    Răspunsuri: 4
    Ultimul Post: 30th March 2007, 14:34
  4. Produs Testat - Seo Elite
    De vladimir în forumul SEO Soft
    Răspunsuri: 18
    Ultimul Post: 10th December 2006, 19:50
  5. Primul si PRIMUL mouse
    De Cristian Mezei în forumul Bar, lobby...
    Răspunsuri: 2
    Ultimul Post: 24th October 2006, 10:16

Permisiuni postare

  • Nu puteţi posta subiecte noi.
  • Nu puteţi răspunde la subiecte
  • Nu puteţi adăuga ataşamente
  • Nu puteţi modifica posturile proprii
  •