Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak zapyac baze
Forum PHP.pl > Forum > Bazy danych > MySQL
yacho1977
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
Może
GROUP BY (adres_licznika)
a dla reszty pól agrgacja w postaci Array_toString
BaN
Oprócz GROUP BY zastosuj jeszcze GROUP_CONCAT
yacho1977
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.
BaN
Ale masz starą wersję bazy danych. W takim razie proponuję wykonać prawie to samo zapytanie co podałeś na początku:
  1. 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:
  1. <?php
  2. $result = @mysql_query($query);
  3. if ($result) {
  4. $odczyty = array();
  5. while ($row = mysql_fetch_assoc($result)) {
  6. if(isset($odczyty[$result['adres_licznika']])) {
  7. $odczyty[$row['adres_licznika']] .= "<br />\n{$row['dane']}";
  8. }
  9. else {
  10. $odczyty[$row['adres_licznika']] = $row['dane'];
  11. }
  12. }
  13. foreach($odczyty as $k => $v) {
  14. echo "<p>$k<br />$v</p>\n";
  15. }
  16. }
  17. ?>
yacho1977
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 sad.gif ((
BaN
Może źle przepisałeś? W wierszu 7. jest '.=' a nie '='. Jakie wyniki otrzymujesz dla trzech odczytów z tym samym adresem?
yacho1977
Raczej źle nie przepisałem bo skopiowałem poprostu smile.gif) Dla trzech odczytów dla danego adresu otrzymuje tylko ostatni wpis w tabeli sad.gif
BaN
Przepraszam, mój błąd. Zamiast:
Kod
if(isset($odczyty[$result['adres_licznika']])) {

ma być:
Kod
if(isset($odczyty[$row['adres_licznika']])) {
yacho1977
SUPER smile.gif))) o to chodziło. Wielkie dzięki. Działa pięknie!!!
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.