Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> LEFT JOIN z 1 rekordem z drugiej tabeli
itsme
post
Post #1





Grupa: Zarząd
Postów: 1 512
Pomógł: 2
Dołączył: 22.04.2002
Skąd: Koszalin




mam dwie tabele
- towar: gdzie jest lista towarow
- cena: gdzie mam liste cen danehgo towaru (przy czym trzymam tam cala historie czyli wszystkie ceny danego towaru lacznie z dana wpisania - najnowsza data danego towaru oznacza aktualna cene)

pytanie: Jakie zapytanie zadać aby wyciagnąć wszystkie rekordy z tabeli towary i tylko jeden rekord do jednego towaru z najnowszą (aktualną) ceną.

probowałem
[sql:1:a73d1eb7ab]SELECT * FROM towar LEFT JOIN cena ON (towar.id_towaru=cena_id_towaru)[/sql:1:a73d1eb7ab]Lecz niestety wykazuje wszystkie rekordy z tabeli towary i wszystkie ceny lacznie ze starymi. Ogólnie dobrze że tak robi bo takie pytanie zadałem. jednak moje oczekiwania są inne.

Czy ktos ma jakąś koncepcję?
wszystkie towary połączone z aktualnymi cenami.

Pozdrawiam
Go to the top of the page
+Quote Post
spenalzo
post
Post #2





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Moze tak?
[sql:1:223be12d08]select * from produkty left join ceny on (produkty.id_towaru=ceny.id_towaru) GROUP BY produkty.id_towaru ORDER BY ceny.czas DESC[/sql:1:223be12d08]
Sprawdziłem na minimalnej ilości danych i działa - zobacz u siebie.
Go to the top of the page
+Quote Post
itsme
post
Post #3





Grupa: Zarząd
Postów: 1 512
Pomógł: 2
Dołączył: 22.04.2002
Skąd: Koszalin




nie do konca podaje 1 napotkana cena a nie cena gdzie data jest najnowsza
Go to the top of the page
+Quote Post
spenalzo
post
Post #4





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


W sumie siedziałem nad tym, i nic nie wymyśliłem.
A wybiera losowy wiersz a nie posortowany ponieważ najpierw wykonuje sie GROUP a dopiero potem ORDER ...
Musze przyznać , że nie mam juz pomysłu.
Go to the top of the page
+Quote Post
itsme
post
Post #5





Grupa: Zarząd
Postów: 1 512
Pomógł: 2
Dołączył: 22.04.2002
Skąd: Koszalin




niestety ja nie dałem rady ...... brakuje tu kogos :-))))

uboottd GDZIE JESTEŚ???
Go to the top of the page
+Quote Post
spenalzo
post
Post #6





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Ok, zrobione (thx rzseattle za wskazówke o tabelach tymczasowych)
[sql:1:1e8bfe2399]CREATE TEMPORARY TABLE tempCeny ( prod_id int(11) not null, czas varchar(14))[/sql:1:1e8bfe2399]
[sql:1:1e8bfe2399]INSERT INTO tempCeny (prod_id, czas) SELECT DISTINCT id_towaru, MAX(czas) FROM ceny GROUP BY id_towaru[/sql:1:1e8bfe2399]
[sql:1:1e8bfe2399]SELECT towary.*, ceny.* FROM towary LEFT JOIN tempCeny ON (towary.id_towaru=tempCeny.prod_id) LEFT JOIN ceny ON (ceny.czas=tempCeny.czas) GROUP BY towary.id_towaru[/sql:1:1e8bfe2399]
[sql:1:1e8bfe2399]DROP TABLE tempCeny[/sql:1:1e8bfe2399]
opcjonalne, po zakończeniu skryptu tabela sama sie usuwa.
Go to the top of the page
+Quote Post
DeyV
post
Post #7





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




to się powinno przydać:
http://www.mysql.com/doc/en/example-Maximu...-group-row.html
Go to the top of the page
+Quote Post
spenalzo
post
Post #8





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Włąśnie w tym był problem, że nie można było użyć podzapytań, bo chodzi to na starym mysqlu.
Go to the top of the page
+Quote Post
itsme
post
Post #9





Grupa: Zarząd
Postów: 1 512
Pomógł: 2
Dołączył: 22.04.2002
Skąd: Koszalin




rowiazanie podeslal mi <b>kurtz </b>
  1. SELECT
  2. towary.towar_id,
  3. towary.towar_opis,
  4. towary.towar_nazwa,
  5. SUBSTRING( MAX( CONCAT(ceny.cena_data,ceny.cena_wartosc) ), 20) AS cena,
  6. LEFT( MAX( CONCAT(ceny.cena_data,ceny.cena_wartosc) ), 19) AS cena_data
  7.  
  8. FROM itsme_towary towary
  9. LEFT JOIN itsme_towary_ceny ceny ON ceny.towar_id = towary.towar_id
  10. GROUP BY ceny.towar_id

sprawdze w domu ;-)
Go to the top of the page
+Quote Post
itsme
post
Post #10





Grupa: Zarząd
Postów: 1 512
Pomógł: 2
Dołączył: 22.04.2002
Skąd: Koszalin




sprawdzialem dziala :-)
Go to the top of the page
+Quote Post
DeyV
post
Post #11





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




czyli jakby na to nie patrzeć - trochę dostosowane zapytanie z podanego linka. Spen - nigdy nie kończ czytać przykładów po 1 zapytaniu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
spenalzo
post
Post #12





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Nieprawda bo doszedłem do drugiego (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) - dopiero potem zobaczyłem że to wszystko w manualu #-o
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: 24.08.2025 - 20:17