Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MIN() z innej tabeli
Forum PHP.pl > Forum > Bazy danych
maniutek08
Witam

Mam tabelę ofert oraz tabelę rozmiarów, wktórej znajdują się sie odpowiednie rozmiary z odpowiednimi cenami. Jedna oferta może mieć kilka rozmiarów.
W jaki sposób ułożyć zapytanie aby jednym zapytaniem pobrać dane oferty oraz jej najniższą cenę i rozmiar

pozdrawiam
nospor
GROUP BY oraz MIN
Więcej info w manualu
maniutek08
Group BY znam.. ale z tego co czytalem nie zaleca się jego używania.. inne pomysły?
nospor
Cytat
ale z tego co czytalem nie zaleca się jego używania
A to dobre smile.gif A gdzie to czytałeś? do tego właśnie co chcesz zrobić masz użyć GROUP BY - po to właśnie został stworzony.
maniutek08
Nie muszę Ci tego wskazywać...
Z doświadczenia też wiem że taka operacja na 1000 rekordach ofert po jakieś 4 rozmarówki skutecznie opóźnia ładowanie strony i jest nie efetywne
Inne pomysły?
nospor
Cytat
Nie muszę Ci tego wskazywać...
Z doświadczenia też wiem że taka operacja na 1000 rekordach ofert po jakieś 4 rozmarówki skutecznie opóźnie łądowanie strony i jest nie efetywne
Jedno wielkie LOL smile.gif

ALe ok. Twoja sprawa, czekaj dalej na inne rozwiązanie smile.gif
SmokAnalog
Maniutek - GROUP BY to jedna z podstawowych operacji SQL i mechanizmy baz danych są zoptymalizowane, możesz śmiało używać smile.gif

Równie dobrze możesz użyć podzapytań, coś na kształt:
  1. SELECT *,
  2. (
  3. SELECT rozmiar
  4. FROM rozmiarowki
  5. WHERE id_oferty = oferty.id_oferty
  6. ORDER BY cena ASC
  7. LIMIT 1
  8. ) AS najtanszy_rozmiar,
  9. (
  10. SELECT cena
  11. FROM rozmiarowki
  12. WHERE id_oferty = oferty.id_oferty
  13. ORDER BY cena ASC
  14. LIMIT 1
  15. ) AS najnizsza_cena
  16. FROM oferty
alegorn
z podzapytaniami to akurat (w standartowym mysql'u) uwazac. nie radzi sobie najlepiej. (tzn baaaaaaaaaaaaardzooooooooooo spooooooowaaaaaaaaaaaaaaaaaalniiiiiiiiaaaaaaaaaaaaaa)
obecnie jest zalecale jest albo przepisanie na joina, albo rozbicie na dwa różne zapytania.

jesli musisz koniecznie uzywac podzapytan - zainteresuj sie silnikiem percona, przepisali ten kawalek kodu od nowa.

j.

edit:: moja pomylka(nie do konca ale nie bylem precyzyjny) nie chodzilo mi o serwer percona ale o fork mariaDB to nie do konca to samo, ale czesto jest w tandemie, tu moja pomylka.
piotrex41
Do tego co chcesz zrobić, to jak napisał @nospor należy użyć GROUP BY i MIN. Jest do dla Ciebie najprostsze i najbardziej optymalne rozwiązanie. Jeśli chodzi o to co przeczytałeś, to nie wiem skąd to wziąłeś, ale albo ktoś się pomylił, albo przegiął ostro, bo wcale to nie obciąża tak bardzo. Nie można wierzyć we wszystko co się gdzieś tam przeczyta, zwłaszcza jak nie jest potwierdzone wink.gif

Pozdro!
mmmmmmm
Cytat(piotrex41 @ 11.07.2012, 14:31:27 ) *
Jeśli chodzi o to co przeczytałeś, to nie wiem skąd to wziąłeś, ale albo ktoś się pomylił, albo przegiął ostro, bo wcale to nie obciąża tak bardzo. Nie można wierzyć we wszystko co się gdzieś tam przeczyta, zwłaszcza jak nie jest potwierdzone wink.gif

I sądzisz, że tysiące internautów bezmyślnie powtarza i nikt tego nie dementuje...
Pseudo baza jaką jest MySQL średnio w porywach do stanów niskich radzi sobie z podzapytaniami. Podobnie jak średnio radzi sobie z WHERE na polach nieindeksowanych. Przy małych tabelach tego nie widać. Przy tabelach rzędu kilkuset tysięcy zaczynają się jej problemy z wydajnością... Niezależnie od ENGINE. I mogę to potwierdzić, bo pracuję z MySQL z tabelami rzędu milionów rekordów... Dla przykładu podam, że na PostgreSQL kłopoty zaczynają się po ok. 10 mln rekordów (zaczyna indeks głupieć, ale wszystko działa OK - robi Scan Seq zamiast Index Seq)
Zresztą MySQL ma tyle błędów, że szkoda gadać...
SmokAnalog
Ponarzekałeś sobie -> jaki wniosek?
nospor
Cytat
I sądzisz, że tysiące internautów bezmyślnie powtarza i nikt tego nie dementuje...
Pseudo baza jaką jest MySQL średnio w porywach do stanów niskich radzi sobie z podzapytaniami.
Czytaj ze zrozumieniem: my (ja i piotrex41) tu mowimy o group by a nie o podzapytaniach...
mmmmmmm
piotrex41 odniósł się do wypowiedzi alegorn (tak mi się wydaje). A tam była mowa o podzapytaniach.
nospor
A ja odnoszę wrażenie ze odniósł się do:
Cytat
Group BY znam.. ale z tego co czytalem nie zaleca się jego używania.. inne pomysły?

Sposób jego wypowiedzi wskazuje, że cały czas pisze do jednej i tej samej osoby,czyli do autora wątku. Jakby chcial zmienić odbiorcę, to by chyba o tym napisał wink.gif
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.