Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] pobieranie z 3 tabel
Polidiota
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.11.2008

Ostrzeżenie: (0%)
-----


Witam,

Mamy trzy tabele:  Groups(id,name), Products(id,prod_name,group_id) PromoGroups(id, group_id)

Do tabli PromoGroups zapisujemy grupy które są w promocji, następmnie z czym mam problem: Potrzebuje pobrać 3 losowe rekordy z tabeli PromoGroups, następnie, trzy rekordy z Groups gdzie  id = group_id, następnie 4rekordy z products gdzie group_id = Groups.id. Chodzi o to żeby na stronie głównej wyświetlane były 3 grupy promocyjne towarów.

Prosze o wszelkie sugestie jak Wy byście to rozwiązali.

Z góry dziękuję za podpowiedzi.

Ten post edytował Polidiota 20.01.2009, 11:21:10
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
EarthCitizen
post
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

Ostrzeżenie: (0%)
-----


A Ty chcesz wyświetlić grupy? Czy towary z tych grup?

Ja osobiście nie rozumiem (przynajmniej po tym opisie) sensu istnienia tabeli PromoGroups, nie lepiej jakieś dodatkowe pole w Groups, którego wartość 1 oznaczałaby, że jest promowany?

Ten post edytował EarthCitizen 20.01.2009, 11:10:57
Go to the top of the page
+Quote Post
webdice
post
Post #3


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Proszę poprawić tytuł temat, same taki nim nie są. W przeciwnym wypadku temat zostanie zamknięty.
Go to the top of the page
+Quote Post
Polidiota
post
Post #4





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.11.2008

Ostrzeżenie: (0%)
-----


Cytat(EarthCitizen @ 20.01.2009, 11:06:14 ) *
A Ty chcesz wyświetlić grupy? Czy towary z tych grup?

Ja osobiście nie rozumiem (przynajmniej po tym opisie) sensu istnienia tabeli PromoGroups, nie lepiej jakieś dodatkowe pole w Groups, którego wartość 1 oznaczałaby, że jest promowany?


Chce wyświetlić nazwe grupy i pierwsze 4 produkty z tej grupy(w jednym divie). Divów będzie w sumie trzy, będą się one tworzyć w pętli.

Co do tabeli PromoGroups, chce dać możliwość w cmsie zaznaczanie grup które będą w promocji, wyświetlają się wszystkie grupy, użytkownik zaznacza sobie te grupy które będą w promocji, gdy zaznaczy np. 5 grup, system pobiera losowo tylko 3 grupy.

Ten post edytował Polidiota 20.01.2009, 11:28:55
Go to the top of the page
+Quote Post
EarthCitizen
post
Post #5





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

Ostrzeżenie: (0%)
-----


Zapytanie pobierające 3 losowe group_id:

  1. SELECT group_id FROM PromoGroups ORDER BY RAND() LIMIT 3


Z resztą sobie poradzisz ?
Go to the top of the page
+Quote Post
Polidiota
post
Post #6





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.11.2008

Ostrzeżenie: (0%)
-----


Cytat(EarthCitizen @ 20.01.2009, 11:38:25 ) *
Zapytanie pobierające 3 losowe group_id:

  1. SELECT group_id FROM PromoGroups ORDER BY RAND() LIMIT 3


Z resztą sobie poradzisz ?




Jeśli byłbyś tak miły i podpowiedział mi dalszy ciąg byłbym bardzo wdzięczny
Go to the top of the page
+Quote Post
EarthCitizen
post
Post #7





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

Ostrzeżenie: (0%)
-----


Wklej mi strukturę tych 3 tabel...
BTW: piszesz CMSa i masz z tym problem? Spróbuj przynajmniej napisać jakie rozwiązanie chodzi Ci po głowie... Nie zawsze dostaniesz pełną odpowiedź lub gotowy skrypt... Musisz w końcu zacząć jakoś dochodzić do rozwiązań samodzielnie...
Go to the top of the page
+Quote Post
Polidiota
post
Post #8





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.11.2008

Ostrzeżenie: (0%)
-----


Struktura Tabel: Groups: | id | group_name|   Products: |id|product_name|image|group_id| Promo_groups: id|group_id|

A rozwiązanie jakie mi przychodzi na myśl to hmm. Może jakiś join:

  1. SELECTC FROM Promo_groups ORDER BY RAND() LIMIT 3 JOIN GROUPS ON GROUP.id = Promo_groups.group_id JOIN Products ON Products.group_id = Groups.id (i tutaj nie wiem czy tak się da) LIMIT 4
Go to the top of the page
+Quote Post
kefirek
post
Post #9





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

Ostrzeżenie: (0%)
-----


Cos w ten desen bedzie
  1. <?php
  2. $wynik = mysql_query("SELECT p.*, g.*, c.* FROM Products p
  3. LEFT JOIN Groups g ON p.group_id=g.id
  4. LEFT JOIN c Promo_groups ON g.id=c.group_id
  5. ORDER BY RAND() LIMIT 3
  6. ");
  7. ?>


Ten post edytował kefirek 20.01.2009, 12:19:34
Go to the top of the page
+Quote Post
Polidiota
post
Post #10





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 12.11.2008

Ostrzeżenie: (0%)
-----


Dzięki za podpowiedzi:)
Go to the top of the page
+Quote Post
EarthCitizen
post
Post #11





Grupa: Zarejestrowani
Postów: 286
Pomógł: 70
Dołączył: 13.01.2009

Ostrzeżenie: (0%)
-----


No nie do końca...
bo z każdej grupy ma być po 4 produkty o ile dobrze zrozumiałem i 3 różnych grup, tak? A te zapytanie (nie testowałem) ale chyba zwróci 3 po prostu losowe rekordy wyniku złączenia, nie koniecznie z 3 różnymi grupami...

Co do łączenia to łączyłbym tylko PromoGroups i Groups....

  1. SELECT b.group_id, b.name
  2. FROM Promo_groups AS a
  3. LEFT JOIN Groups AS b ON a.group_id = b.group_id
  4. ORDER BY RAND() LIMIT 3


Ale to zapytanie też nie jest odporne na duplikaty, trzeba dodać GROUP BY group_id chyba...
Później wynik z tego dać do prostego zapytania

  1. SELECT * FROM products WHERE group_id IN(group_id1, group_id2) ORDER BY group_id

Te sortowanie na końcu jest potrzebne aby łatwiej było w pętli wypisać produkty z tych samych grup w kolejności...

P.S. po pracy sprawdzę te zapytanie i odpiszę, ale pewnie będzie do tej pory już gotowa odpowiedź...

Ten post edytował EarthCitizen 20.01.2009, 12:24:32
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.09.2025 - 09:20