Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 0 Dołączył: 30.11.2003 Ostrzeżenie: (0%)
|
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 (IMG:http://forum.php.pl/style_emoticons/default/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 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 196 Pomógł: 0 Dołączył: 29.04.2002 Skąd: jesteś? Ostrzeżenie: (0%)
|
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. |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%)
|
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. |
|
|
|
Post
#4
|
|
|
Administrator serwera Grupa: Przyjaciele php.pl Postów: 909 Pomógł: 0 Dołączył: 12.08.2003 Skąd: /var/www/wroclaw.php Ostrzeżenie: (0%)
|
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 (IMG:http://forum.php.pl/style_emoticons/default/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) |
|
|
|
![]() ![]() |
|
Aktualny czas: 23.12.2025 - 17:13 |