Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie do dwóch tabel - min i max --> HELP :)
Forum PHP.pl > Forum > Bazy danych
luckyluc
Witam,

Mam problem z połączeniem dwóch tabel. Może najpierw zaprezentuje struktury:


Produkty:

produkty_id
produkty_grupa
produkty_nazwa

Przykład danych:

1 || Buty włoskie || But 1 ||
2 || Buty włoskie || But 2 ||
3 || Buty włoskie || But 3 ||


=========


Podprodukty:


podprodukty_id
podprodukity_produkt
podprodukty_nazwa
podprodukty_cena


Przykład danych:

1 || 1 || 39 || 90 zł
2 || 1 || 40 || 95 zł
3 || 1 || 41 || 100 zł
4 || 1 || 42 || 105 zł
5 || 2 || 39 || 60 zł
6 || 2 || 40 || 65 zł
7 || 2 || 41 || 70 zł
8 || 2 || 42 || 75 zł


Zależy mi na tym, aby do produktu przypisać najniższą i najwyższą cenę podproduktu. Ale nie potrzebuje wartości cenowej tylko ID podroduktów z najniższa i najwyższą wartością.


1 || Buty włoskie || But 1 || ID 1 // ID 4


Zapytanie, którym wypisuje produkty:

SELECT produkty_id, produkty_grupa, produkty_nazwa, podprodukty_cena, FROM podprodukty LEFT JOIN produkty ON (produkty_id=podprodukty_produkt) GROUP BY produkty_id ORDER BY produkty_nazwa ASC


Pomoc mile widziana smile.gif
5k7
Witam,

Musisz mieć podzapytania do wyciągnięcia tego. Dodaj klauzule where do zapytania

WHERE id= (SELECT MAX(id) FROM podprodukty) OR id = (SELECT MIN(id) FROM podprodukty)

Oczywiście przerób sobie where na odpowiednie kolumny itd.

Pozdr
5k7
Nie do końca zrozumiałem.

Chodzi Ci o warunek WHERE cena BETWEEN 100 AND 500 ?
luckyluc
Funkcją MIN(podprodukty_cena) AS cena wyciągam sobie najniższe ceny. Teraz chce wypisać rekordy np. WHERE cena > 100 zł AND cena <500

Jak odwołać się w warunku WHERE do polasa AS CENA
5k7
Nie ma możliwości aby używać aliasów (w tym wypadku cena) w klauzuli WHERE. Musisz zawsze odnieść się do jakiejś kolumny nie aliasu czyli w Twoim wypadku powinno być WHERE podprodukty_cena BETWEEN 100 AND 500. Nie wiem jeszcze do czego ma służyć ta funcja min w tym nowym wypadku. Napisz dokładnie co chcesz uzyskać to wyklepie Ci to wink.gif
luckyluc
W takim razie od początku. Mam takie tabele:


Produkty:


produkty_id
produkty_grupa
produkty_nazwa

Przykład danych:

1 || Buty włoskie || But 1 ||
2 || Buty włoskie || But 2 ||
3 || Buty włoskie || But 3 ||


=========


Podprodukty:


podprodukty_id
podprodukity_produkt
podprodukty_nazwa
podprodukty_cena


Przykład danych:

1 || 1 || 39 || 90 zł
2 || 1 || 40 || 95 zł
3 || 1 || 41 || 100 zł
4 || 1 || 42 || 105 zł
5 || 2 || 39 || 60 zł
6 || 2 || 40 || 65 zł
7 || 2 || 41 || 70 zł


Muszę napisać uniwersalne zapytanie, które:

- wypisze wszystkie produkty dla danej grupy przy jednoczesnym podaniu najniższej ceny podproduktu i ilości wariantów (zliczy ile jest podproduktów dla danego produktu)

- będzie umożliwiało wyszukiwanie z przedziału cenowego od do

- będzie sortować od najniższej do najwyższej ceny


1 || Buty włoskie || But 1 || 90 zł || 4 warianty
2. || Buty włoskie || But 2 || 60 zł || 3 warianty
skowron-line
Cytat(5k7 @ 2.12.2011, 11:31:13 ) *
Nie ma możliwości aby używać aliasów (w tym wypadku cena) w klauzuli WHERE.

Ale skoro ma alias na
Kod
MIN(kolumna)

to co to za problem odwołać się
Kod
WHERE cena > MIN(kolumna)

5k7
no nie możesz używać aliasów w klauzuli where - wygoogluj sobie. Rozpisze to zapytanie wieczorkiem. Teraz nie mam czasu
skowron-line
Cytat(5k7 @ 5.12.2011, 15:36:09 ) *
no nie możesz używać aliasów w klauzuli where - wygoogluj sobie. Rozpisze to zapytanie wieczorkiem. Teraz nie mam czasu

A czy ja napisałem że można questionmark.gif
luckyluc
Cytat(skowron-line @ 5.12.2011, 14:13:22 ) *
Ale skoro ma alias na
Kod
MIN(kolumna)

to co to za problem odwołać się
Kod
WHERE cena > MIN(kolumna)


Sam sobie zaprzeczasz. W przykładzie, który podałeś odwołujesz się właśnie do aliasu "cena" smile.gif
skowron-line
Cytat(luckyluc @ 5.12.2011, 21:31:57 ) *
Sam sobie zaprzeczasz. W przykładzie, który podałeś odwołujesz się właśnie do aliasu "cena" smile.gif

Rzeczywiście, przepraszam @5k7 źle spojrzałem. Wydawało mi się że to kolumna.
5k7
Cytat(luckyluc @ 5.12.2011, 12:27:28 ) *
- wypisze wszystkie produkty dla danej grupy przy jednoczesnym podaniu najniższej ceny podproduktu i ilości wariantów (zliczy ile jest podproduktów dla danego produktu)


Zliczenie wariantów zawsze wymaga grupowania. A więc nie ma możliwości wypisania wszystkich podproduktów z ilością wariantów. Jedyne co możesz przy okazji zrobić to wyciągnąć produkt, który ma najniższą cenę i dołączyć do konkretnego zliczenia dla konkretnej podkategorii.

SELECT `pr`.*, `pp`.`podprodukty_id`, `pp`.`podprodukty_produkt`, `pp`.`podprodukty_nazwa`, `pp`.`podprodukty_cena` AS `cena`, COUNT(podprodukty_produkt) AS `liczba_wariantow` FROM `produkty` AS `pr` INNER JOIN `podprodukty` AS `pp` ON pr.produkty_id=pp.podprodukty_produkt GROUP BY `pp`.`podprodukty_produkt` ORDER BY `pp`.`podprodukty_cena` ASC

Cytat(luckyluc @ 5.12.2011, 12:27:28 ) *
- będzie umożliwiało wyszukiwanie z przedziału cenowego od do
- będzie sortować od najniższej do najwyższej ceny


Biorąc pod uwagę wszystkie podkategorie

SELECT `pr`.*, `pp`.`podprodukty_id`, `pp`.`podprodukty_produkt`, `pp`.`podprodukty_nazwa`, `pp`.`podprodukty_cena` AS `cena` FROM `produkty` AS `pr` INNER JOIN `podprodukty` AS `pp` ON pr.produkty_id=pp.podprodukty_produkt WHERE (pp.podprodukty_cena BETWEEN 100 AND 500) ORDER BY `pp`.`podprodukty_cena` DESC


Na koniec jeszcze pytanko o to co napisałeś czyli :

Mamy tabele 1

produkty_id
produkty_grupa
produkty_nazwa

1 || Buty włoskie || But 1 ||
2 || Buty włoskie || But 2 ||
3 || Buty włoskie || But 3 ||

I tabele 2

podprodukty_id
podprodukity_produkt
podprodukty_nazwa
podprodukty_cena

1 || 1 || 39 || 90 zł

Rozumiem że liczba 39 to nie jest nazwa produktu ? A więc co to jest ? Może o czymś zapomniałeś napisać.


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.