Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Care mai sunt mediile de admitere...

Laptop cu HDD atasare memorie MMC...

Hartile google nu mai au chenarul...

Tomate in ghiveci la curte?
 Idei cale de actiune recuperare g...

Intoleranța lactoza- vegan v...

Tobe acustice insonorizare in blo...

Cine canta? Fragment din melodie...
 Tablou sigurante Dacia Sandero 2012

Baby Reindeer - 2024

Hotii voteaza hoti?!

Camera video masina
 Zilele emailului din gospodaria n...

Best gaming laptop?

Humane (2024)

Recomandare casti 100-150 lei
 

MySQL - Selectare 5 produse din fiecare categorie

- - - - -
  • Please log in to reply
8 replies to this topic

#1
C-Andrei

C-Andrei

    New Member

  • Grup: Junior Members
  • Posts: 12
  • Înscris: 16.02.2016
Salutare!

O să iau exemplul unor produse și categorii. Există coloana product_category_id în tabelul products și category_id în tabelul categories.

Acum, vreau să selectez toate categoriile și câte 5 produse din fiecare categorie.

De exemplu, dacă am cateogoriile cu id-urile 1, 2, 3, atunci vreau să extrag:

5 produse unde product_category_id = 1
5 produse unde product_category_id = 2
5 produse unde product_category_id = 3

Dacă una din categorii are decât 4 produse, e ok. Să le scoată pe alea 4.

PS: Am tot căutat pe net, dar nu-mi dă ce-mi trebuie. Am impresia că nu caut cum trebuie...

#2
tigerheart

tigerheart

    Savage Member

  • Grup: Senior Members
  • Posts: 9,897
  • Înscris: 07.08.2008
Adica asa https://stackoverflo...select-in-mysql ?

#3
C-Andrei

C-Andrei

    New Member

  • Grup: Junior Members
  • Posts: 12
  • Înscris: 16.02.2016
Nu. Nu așa.

Am nevoie de 5 rezultate din fiecare tabel, nu 5 rezultate din toate tabelele.

#4
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 20,043
  • Înscris: 24.02.2006
https://stackoverflo...r-each-category

#5
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,240
  • Înscris: 24.02.2007
Interogari separate pentru fiecare categorie sau o procedura stocata ce construieste un query masiv cu union all?

In Postgresql de exemplu ai functii speciale pentru asa ceva https://robots.thoug...indow-functions (si e mult mai capabil si chiar mai gratis decat jucaria de mysql)

Edited by dani.user, 27 May 2017 - 09:58.


#6
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostC-Andrei, on 27 mai 2017 - 08:56, said:

Salutare!

O să iau exemplul unor produse și categorii. Există coloana product_category_id în tabelul products și category_id în tabelul categories.

Acum, vreau să selectez toate categoriile și câte 5 produse din fiecare categorie.
Despre cate categorii vorbim? Ca solutia e diferita pentru 1, 10, 100, 1000 categorii.

Categoriile astea sunt si imbricate?

#7
C-Andrei

C-Andrei

    New Member

  • Grup: Junior Members
  • Posts: 12
  • Înscris: 16.02.2016
@Smiley, am ajuns și la acel query înainte de a posta aici, dar mi s-a părut cam "ambigue" pentru ce vreau eu...

@dani, mi se pare așa de simplu query-ul pe care îl vreau încât mi se pare prea mult să fac o procedură. Mă interesa un query simplu.

@OC, nu. Sunt categorii simple, generale, fără sub-categorii etc.

Edited by C-Andrei, 27 May 2017 - 15:42.


#8
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 20,043
  • Înscris: 24.02.2006

View PostC-Andrei, on 27 mai 2017 - 15:42, said:

@Smiley, am ajuns și la acel query înainte de a posta aici, dar mi s-a părut cam "ambigue" pentru ce vreau eu......

pai face fix ce vrei tu.
daca nu-ti place si vrei ceva mai simplu, cauta un SGBD care stie "RANK ... OVER PARTITION...ORDER BY". ti s-a dat mai sus un exemplu (postgresql), SQL Server stie si el asa ceva (de la versiunea 2012 in sus stie chiar mai multe pe tema asta)...

#9
romio79

romio79

    Active Member

  • Grup: Members
  • Posts: 1,655
  • Înscris: 30.03.2005
se poate face variabila aia sau fara limit si union all, dar alea sunt variante mai rapide, probabil varianta cu variabila ar fi cea mai buna.
Daca preferi varianta lenta, cam asta ar fi (presupun ca tablelul products are un id numit  product_id )
SELECT t1.product_category_id, t1.product_id
   FROM products t1
   LEFT JOIN products t2 ON t1.product_category_id = t2.product_category_id AND t2.product_id < t1.product_id
   GROUP BY  t1.product_category_id, t1.product_id
   HAVING COUNT(t2.product_id) < 5



Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate