Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak zapyac baze
yacho1977
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 22.11.2007

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
php programmer
post
Post #2





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


Może
GROUP BY (adres_licznika)
a dla reszty pól agrgacja w postaci Array_toString
Go to the top of the page
+Quote Post
BaN
post
Post #3





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


Oprócz GROUP BY zastosuj jeszcze GROUP_CONCAT
Go to the top of the page
+Quote Post
yacho1977
post
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 22.11.2007

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


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.

Ten post edytował yacho1977 28.11.2007, 21:48:26
Go to the top of the page
+Quote Post
BaN
post
Post #5





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


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. ?>
Go to the top of the page
+Quote Post
yacho1977
post
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 22.11.2007

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


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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) ((

Ten post edytował yacho1977 1.12.2007, 22:59:47
Go to the top of the page
+Quote Post
BaN
post
Post #7





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


Może źle przepisałeś? W wierszu 7. jest '.=' a nie '='. Jakie wyniki otrzymujesz dla trzech odczytów z tym samym adresem?
Go to the top of the page
+Quote Post
yacho1977
post
Post #8





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 22.11.2007

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


Raczej źle nie przepisałem bo skopiowałem poprostu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ) Dla trzech odczytów dla danego adresu otrzymuje tylko ostatni wpis w tabeli (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
BaN
post
Post #9





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


Przepraszam, mój błąd. Zamiast:
Kod
if(isset($odczyty[$result['adres_licznika']])) {

ma być:
Kod
if(isset($odczyty[$row['adres_licznika']])) {


Ten post edytował BaN 2.12.2007, 20:22:44
Go to the top of the page
+Quote Post
yacho1977
post
Post #10





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 22.11.2007

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


SUPER (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ))) o to chodziło. Wielkie dzięki. Działa pięknie!!!
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 10:42