yacho1977
27.11.2007, 23:31:51
Witam.
Mam tabele w której nagłówki są następujace:
id_tabeli, adres_licznika, nr_licznika, stan_licznika, data_odczytu
Na jednym adresie istnieją dwa lub cztery liczniki które w tym samym okresie mają zapisane jakieś stany.
Zwykły Select * From tab_odczyty Where data_odczytu=2007-11-30 generuje mi następujące zestawienie:
ul. Cicha 15, 667788, 456, 2007-11-30
ul. Cicha 15, 667799, 345, 2007-11-30
ul. Straszna 1, 441122, 145, 2007-11-30
ul. Straszna 1, 441133, 195, 2007-11-30
ul. Straszna 1, 441144, 305, 2007-11-30
ul. Straszna 1, 441155, 45, 2007-11-30
...
Oczywiście chodzi mi o prezentacje w przegladarce na stronie internetowej.
Jednak chciałbym uzyskać coś takiego:
ul. Cicha 15
667788, 456, 2007-11-30
667799, 345, 2007-11-30
ul. Straszna 1
441122, 145, 2007-11-30
441133, 195, 2007-11-30
441144, 305, 2007-11-30
441155, 45, 2007-11-30
Nie mam zielonego pojęcia jak to zrobić.
Proszę o pomoc jeśli ktoś ma jakiś pomysł.
Pozdrawiam
php programmer
28.11.2007, 12:55:00
Może
GROUP BY (adres_licznika)
a dla reszty pól agrgacja w postaci Array_toString
Oprócz GROUP BY zastosuj jeszcze GROUP_CONCAT
yacho1977
28.11.2007, 21:23:56
Jak zrobie samo GROUP BY to sortuje wg adresu ale tylko z jednym licznikiem, drugiego licznika nie ma. Nie wiem co znaczy agrgacja w postaci Array_toString.
Funkcji GROUP_CONCAT nie potrafię zastosować. Pytałem w google ale z tamtych podpowiedzi też nie za wiele się dowiedziałem.
Proszę rozwińcie troszkę Wasze podpowiedzi.
Dzięki
P.S.
Moja wersja MySQL 3.23.58 czyli z tego co czytałem GROUP_CONCAT nie działa.
Ale masz starą wersję bazy danych. W takim razie proponuję wykonać prawie to samo zapytanie co podałeś na początku:
SELECT adres_licznika CONCAT(nr_licznika,', ',stan_licznika,', ',data_odczytu) AS dane FROM tab_odczyty WHERE data_odczytu='2007-11-30'
ale wyniki zapisywać w tabeli, w której indeksem jest pole adresu i później wyświetlić wyniki, czyli coś w stylu:
<?php
if ($result) {
if(isset($odczyty[$result['adres_licznika']])) { $odczyty[$row['adres_licznika']] .= "<br />\n{$row['dane']}";
}
else {
$odczyty[$row['adres_licznika']] = $row['dane'];
}
}
foreach($odczyty as $k => $v) {
echo "<p>$k<br />$v</p>\n"; }
}
?>
yacho1977
1.12.2007, 22:58:41
w phpmyadmin po wpisaniu SELECT-a otrzymuje:
adres_licznika dane doniecka 1a/7 1111111111, 10, 2007-12-01
doniecka 1a/7 2222222222, 50, 2007-12-01
A po wstawieniu do skryptu php otrzymuje:
doniecka 1a/7
2222222222, 50, 2007-12-01
Pokazuje tylko jeden licznik na adresie a powinien pod adresem pokazac obydwa

((
Może źle przepisałeś? W wierszu 7. jest '.=' a nie '='. Jakie wyniki otrzymujesz dla trzech odczytów z tym samym adresem?
yacho1977
2.12.2007, 20:06:47
Raczej źle nie przepisałem bo skopiowałem poprostu

) Dla trzech odczytów dla danego adresu otrzymuje tylko ostatni wpis w tabeli
Przepraszam, mój błąd. Zamiast:
Kod
if(isset($odczyty[$result['adres_licznika']])) {
ma być:
Kod
if(isset($odczyty[$row['adres_licznika']])) {
yacho1977
2.12.2007, 20:36:54
SUPER

))) o to chodziło. Wielkie dzięki. Działa pięknie!!!