Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobieranie danych z 2 tabeli...
jasina
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 16.10.2004

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


Witam serdecznie

Mam 2 tabele samochody i wersje.

tabela samochody ma następujące kolumny:
samochod_id
samochod_nazwa
samochod_model

tabela wersje:
wersja_id
samochod_id
wersja_silnik
wersja_moc

Chciałbym pobrać wszystkie rekordy z tabeli samochodu, tak aby każdy model miał przypisany silnik o najmniejszej mocy tak aby na liście samochodów było coś takiego, np:
Cytat
Mercedes E
od 145 koni mechanicznych


Problem w tym, ze przy zapytaniu:

Kod
SELECT
    s.*,
    w.*
FROM samochody AS s
INNER JOIN wersje AS w ON s.samochod_id=w.samochod_id
ORDER BY
    w.wersja_moc ASC


To zapytanie jednak nie wykonuje tego co chciałem.
Dostaję listę rekordów wszystkich samochodów z wszystkimi silnikami a nie tylko z najsłabszymi czyli dostaję x Mercedesów klasy E (dla kazdej wersji 1 rekord)

Jak powinno wyglądać poprawne zapytanie?
Go to the top of the page
+Quote Post
Zbłąkany
post
Post #2


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

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


Najpierw pobierz listę wersji o najniższej mocy silnika, a potem połącz ją z samochodami smile.gif . Poczytaj o funkcji MIN() .


--------------------
Środowisko: Gentoo 2008.0 | Apache | PHP5 | PostgreSQL | MySQL | Postfix
Workstation: Gentoo 2008.0 | Firefox
Thomas Alva Edison: "Aby coś wynaleźć wystarczy odrobina wyobraźni i sterta złomu ..."
Odpowiedź na każde pytanie typu "Jak ...": "Nie da się, to nie PostgreSQL"
Go to the top of the page
+Quote Post
jasina
post
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 16.10.2004

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


A czy nie da się tego zrobić pobierając najpierw listę modeli ? Może UNION

Zrobiłem następujące zapytanie:

  1. SELECT
  2. s.samochod_id, s.samochod_nazwa, s.samochod_model
  3. MIN(w.wersja_moc) AS moc_min,
  4. MAX(w.wersja_moc) AS moc_max,
  5. COUNT(w.wersja_moc) AS ilosc_modeli
  6.  
  7. FROM samochody s p
  8.  
  9. LEFT JOIN wersje w ON (s.samochod_id = w.samochod_id)
  10.  
  11.  
  12. GROUP BY
  13. s.samochod_id, s.samochod_nazwa, s.samochod_model
  14. ORDER BY s.samochod_nazwa
  15. LIMIT 10 OFFSET 0


I otrzymuje takie dane jak chce... wyświetlam je tak:
Kod
while ($r=pg_fetch_array($q)) {
print "
$r[samochod_nazwa] $r[samochod_model]<br>
znaleziono $r[ilosc_modeli] modeli o mocy od $r[moc_min] do $r[moc_max]
";
}


Nie wiem tylko jak dodać do mojego zapytania warunek WHERE tak aby wyswietlać samochody o mocy minimalnej od 100...

jak daje:
  1. ...WHERE moc_min>100...

to wyskakuje mi błąd, że "kolumna moc_min nie istnieje"...

Czy ktoś wie jak rozwiązać ten problem?
Go to the top of the page
+Quote Post
jezoo
post
Post #4





Grupa: Zarejestrowani
Postów: 92
Pomógł: 3
Dołączył: 4.04.2006

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


Cytat(jasina @ 25.12.2006, 16:17:24 ) *
to wyskakuje mi błąd, że "kolumna moc_min nie istnieje"...


sprobuj wpiswac razem: mocmin tzn nazwe kolumny zmien na taka jak podalem

ja mialem podobny problem ale u mnie nie widzial duzych liter np mialeem:
idPat to krzyczal ze takiego czegos nie ma a jak mu zmienilem na idpat to juz widzi i smiga smile.gif
moze u Ciebie jest podobny problem z tym ze z _

proba nie strzelba smile.gif

Ten post edytował jezoo 26.12.2006, 19:13:47
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 07:36