Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] pobieranie z 3 tabel
Forum PHP.pl > Forum > Przedszkole
Polidiota
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.
EarthCitizen
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?
webdice
Proszę poprawić tytuł temat, same taki nim nie są. W przeciwnym wypadku temat zostanie zamknięty.
Polidiota
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.
EarthCitizen
Zapytanie pobierające 3 losowe group_id:

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


Z resztą sobie poradzisz ?
Polidiota
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
EarthCitizen
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...
Polidiota
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
kefirek
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. ?>
Polidiota
Dzięki za podpowiedzi:)
EarthCitizen
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ź...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.