Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: trudne zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
ktuvok
Mam następującą strukturę danych:

Tabala Klienci:
IDKlienta
Imie
Nazwisko

Tabela Pozyczki:
IDPozyczki
Kwota
DataUdzielenia

Tabela PozyczkiKlientow:
ID
IDKlienta
IDPozyczki
(jeden klient może mieć wiele pożyczek, jedną pożyczkę może wziąć więcej niż jedna osoba)

Robię zapytanie, które zwróci mi w kolejnych wierszach pożyczki spełniające określone kryteria. Napisałem tak:

Kod
SELECT Pozyczki.IDPozyczki, Pozyczki.Kwota,

CONCAT_WS(' ', Klienci.Nazwisko, Klienci.Imie) AS NazwaKlienta

FROM Pozyczki, Klienci, PozyczkiKlientow

WHERE Klienci.IDKlienta = PozyczkiKlientow.IDKlienta

AND Pozyczki.IDPozyczki = PozyczkiKlientow.IDPozyczki

AND ...

ORDER BY Pozyczki.IDPozyczki;

ale pożyczki, do których przypisano więcej niż 1 klienta, wyświetlają się podwójnie - w osobnych rekordach. Otrzymuję więc:

IDPozyczki | Kwota | Klient
1 | 1000 | Nowak Jacek
1 | 1000 | Kowalski Robert
2 | 5000 | Kos Ludwik

a chciałbym:

IDPozyczki | Kwota | Klient
1 | 1000 | Nowak Jacek, Kowalski Robert
2 | 5000 | Kos Ludwik

Próbowałem z GROUP BY IDPozyczki, ale zwraca mi tylko pierwszy rekord. Jest co prawda funkcja GROUP_CONCAT, ale dostępna dopiero od MySQL 4.1 sad.gif A ja mam MySQL 4.0.16.

Osobna sprawa to to, że chciałbym rówież WYSZUKIWAĆ po nazwisku klienta (teraz mogę), więc nie bardzo mam jak pobierać go w osobnym zapytaniu.

Czy ma ktoś na to wszystko pomysł?

Pozdrawiam,
Krzysiek
Koshin
to mzoe glupie, ale czy sprawdzales czy SUM nie zadziala ? (nie pamietam czy sum dziala na nie-liczbach)

na necie widzialem biblioteke dll ktora dolacza te funkcje ktora jest dopiero w 4.1, ale ty raczej masz linuxa, wiec to ci nie pomoze, ale poczytaj... : http://dev.mysql.com/doc/mysql/en/GROUP-BY...-Functions.html

inna sprawa, to mozna wynik wrzucic do tabel, i juz w samym php zadbac o odpowiedni wyglad.
spenalzo
Hmm nie ma sensu za bardzo cudować z bazą - należy pamiętać o tym, że nie wszystko trzeba pakować do zapytania - php jest wielokrotnie szybsze.

Użyj tutaj teog zapytania co masz, a reszte zrob w php.
Bakus
Szybkość php i MySQLa jest pojęciem względnym...
Zauważ, że wybranie 1 wiersza z kilku milionów mysql'owi nie zajmie dużo (zwłaszcza przy wibieraniu dzięki kolumnie auto_increment), a pobranie całej tabeli (kilka tys. wierszy) i wyszukanie tego jednego w php mija się z celem, bo pamięć eksploduje winksmiley.jpg

A co do zapytania... uważam, iż nie należy zbytnio
przesadzać z przeżucaniem zadań na bazę danych... Najlepiej (i chyba najszybciej) będzie wybrać tylko potrzebne dane z bazy (i tu rola bazy) i je rozsądnie połączyć w ładną HTMLową papkę (i tu rola php).

Osobiście proponuję utworzenie tablicy w php, która posiadając klucze będące IDPożyczki będzie zawierała kolejne nazwiska... zwykłe operacje na tabelach (mysql) i tablicach (php)... i nie trzeba żadnych GROUP BY, czy GROUP_CONCAT...

8) i o to chodzi... i dla tego świat jest piękny 8)
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.