Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Pobieranie wyników z kilku tabel i sortowanie ich.
brzanek
post
Post #1





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Witam mam problem z pobraniem danych z kilku tabel.
Mam 3 tabele




Do każdej z nich dodawane są nowe rekordy z warunkami pogodowymi co 5 minut.
Chciałbym pobrać dane z tych tabel a konkretnie wartości w tempmax ale dla danego dnia. Chcę aby wyniki były wyświetlone od najwyższej temperatury dnia 03.08.2015 do najniższej tego dnia. Muszą też pojawić się nazwy miejscowości oraz data np:

DZIEŃ MIEJSCOWOŚĆ TEMPERATURA
03.08.2015 Choszczno 32*C
03.08.2015 Drawsko 31*C
03.08.2015 Koszalin 30*C
Proszę o pomoc z góry dziękuję i pozdrawiam.
Go to the top of the page
+Quote Post
bobek358
post
Post #2





Grupa: Zarejestrowani
Postów: 143
Pomógł: 22
Dołączył: 17.11.2007

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


Tabele mają taką samą strukturę. Wystarcz zastosować zapytanie SQL z UNION:

  1. (SELECT CONCAT('choszczno'), MAX(tempmax) FROM xxxxx_choszczno WHERE dzien LIKE 'xxxx-xx-xx%')
  2. UNION
  3. (SELECT CONCAT('koszalin'), MAX(tempmax) FROM xxxxx_koszalin WHERE dzien LIKE 'xxxx-xx-xx%')
  4. UNION
  5. (SELECT CONCAT('drawsko'), MAX(tempmax) FROM xxxxx_drawsko WHERE dzien LIKE 'xxxx-xx-xx%')


Ten post edytował bobek358 3.08.2015, 13:13:07
Go to the top of the page
+Quote Post
brzanek
post
Post #3





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Jesteś pewien że podane przez ciebie rozwiązanie zadziała? Próbuję to wywołać przez php ale nie wychodzi.
  1. <?php
  2. require_once "../maincore.php";
  3. require_once THEMES."templates/header.php";
  4. // podłączamy plik connection.php
  5. require "connection1.php";
  6. // wywołujemy funkcję connection()
  7. connection();
  8.  
  9.  
  10. echo '<hr>';
  11. echo '<h3>Rekordy pomiarów</h3>';
  12. echo '<p>Strona odświerzana jest raz na dobę w godzinach 00:00 - 01:00. W tym czasie spływają dane ze stacji pogodowych, trwa zapisywanie wyników w naszej bazie danych a następnie przekazywane na stronę.
  13. W tej chwili dane spływają z kilkunastu miast naszego województwa. Rekardy mierzone są od 18.06.2015 roku.</p>';
  14. echo '<hr>';
  15. echo '<div class="row">';
  16.  
  17. $query = " (SELECT CONCAT('choszczno'), MAX(tempmax) FROM fusionee445_warunki_choszczno WHERE dzien LIKE '2015-08-03 %')
  18. UNION
  19. (SELECT CONCAT('koszalin'), MAX(tempmax) FROM fusionee445_warunki_koszalin WHERE dzien LIKE '2015-08-03 %')
  20. UNION
  21. (SELECT CONCAT('drawsko'), MAX(tempmax) FROM fusionee445_warunki_drawsko WHERE dzien LIKE '2015-08-03 %') DESC LIMIT 15";
  22. $result = mysql_query($query) or die(mysql_error());
  23. $miejsce = 1;
  24. echo '<div class="col-md-4">';
  25. echo '<h4>Najwyższe temperatury</h4>';
  26. echo '<p>Temperatura mierzona jest na wysokości 2m w cieniu. Wynik to najwyższa temperatura w ciągu dnia.</p>';
  27. echo '<table class="table table-hover">
  28. <thead>
  29. <tr>
  30. <th>#</th>
  31. <th>Temperatura</th>
  32. <th>Miejscowość</th>
  33. <th>Data</th>
  34. </tr>
  35. </thead>
  36. <tbody>';
  37. while($row = mysql_fetch_array($result)){
  38. echo "<tr>
  39. <th scope='row'>test</th>";
  40. echo "<td>".$row['tempmax']."&deg;C</td>";
  41. //echo "<td>".$row['title']."</td>";
  42. //echo "<td>".$row['history_day']."</td>";
  43. echo '</tr>';
  44. }
  45. echo '</tbody>
  46. </table>';
  47. echo '</div>';
  48.  
  49. echo '</div>';
  50.  
  51.  
  52. //$sql = "SELECT * FROM wea_history WHERE history_day LIKE \'2015-07-18\'";
  53.  
  54.  
  55. require_once THEMES."templates/footer.php";
  56. ?>
Go to the top of the page
+Quote Post
bobek358
post
Post #4





Grupa: Zarejestrowani
Postów: 143
Pomógł: 22
Dołączył: 17.11.2007

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


No a co to za bubel:

  1. .... DESC LIMIT 15


Jeśli chcesz sortować to zrób tak:

  1. (SELECT CONCAT('choszczno'), MAX(tempmax) AS max FROM fusionee445_warunki_choszczno WHERE dzien LIKE '2015-08-03 %')
  2. UNION
  3. (SELECT CONCAT('koszalin'), MAX(tempmax) AS max FROM fusionee445_warunki_koszalin WHERE dzien LIKE '2015-08-03 %')
  4. UNION
  5. (SELECT CONCAT('drawsko'), MAX(tempmax) AS max FROM fusionee445_warunki_drawsko WHERE dzien LIKE '2015-08-03 %') ORDER BY max DESC LIMIT 15


Ten post edytował bobek358 3.08.2015, 13:59:06
Go to the top of the page
+Quote Post
brzanek
post
Post #5





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Zapytanie nie zwraca błędów ale i nie pokazuje też wyników.
  1. <?php
  2. require_once "../maincore.php";
  3. require_once THEMES."templates/header.php";
  4. // podłączamy plik connection.php
  5. require "connection1.php";
  6. // wywołujemy funkcję connection()
  7. connection();
  8.  
  9.  
  10. echo '<hr>';
  11. echo '<h3>Rekordy pomiarów</h3>';
  12. echo '<p>Strona odświerzana jest raz na dobę w godzinach 00:00 - 01:00. W tym czasie spływają dane ze stacji pogodowych, trwa zapisywanie wyników w naszej bazie danych a następnie przekazywane na stronę.
  13. W tej chwili dane spływają z kilkunastu miast naszego województwa. Rekardy mierzone są od 18.06.2015 roku.</p>';
  14. echo '<hr>';
  15. echo '<div class="row">';
  16.  
  17. $query = " (SELECT CONCAT('choszczno'), MAX(tempmax) AS max FROM fusionee445_warunki_choszczno WHERE dzien LIKE '2015-08-03 %')
  18. UNION
  19. (SELECT CONCAT('koszalin'), MAX(tempmax) AS max FROM fusionee445_warunki_koszalin WHERE dzien LIKE '2015-08-03 %')
  20. UNION
  21. (SELECT CONCAT('drawsko'), MAX(tempmax) AS max FROM fusionee445_warunki_drawsko WHERE dzien LIKE '2015-08-03 %') ORDER BY max DESC LIMIT 15";
  22. $result = mysql_query($query) or die(mysql_error());
  23. $miejsce = 1;
  24. echo '<div class="col-md-4">';
  25. echo '<h4>Najwyższe temperatury</h4>';
  26. echo '<p>Temperatura mierzona jest na wysokości 2m w cieniu. Wynik to najwyższa temperatura w ciągu dnia.</p>';
  27. echo '<table class="table table-hover">
  28. <thead>
  29. <tr>
  30. <th>#</th>
  31. <th>Temperatura</th>
  32. <th>Miejscowość</th>
  33. <th>Data</th>
  34. </tr>
  35. </thead>
  36. <tbody>';
  37. while($row = mysql_fetch_array($result)){
  38. echo "<tr>
  39. <th scope='row'>test</th>";
  40. echo "<td>".$row['tempmax']."&deg;C</td>";
  41. //echo "<td>".$row['title']."</td>";
  42. //echo "<td>".$row['history_day']."</td>";
  43. echo '</tr>';
  44. }
  45. echo '</tbody>
  46. </table>';
  47. echo '</div>';
  48.  
  49. echo '</div>';
  50.  
  51.  
  52. //$sql = "SELECT * FROM wea_history WHERE history_day LIKE \'2015-07-18\'";
  53.  
  54.  
  55. require_once THEMES."templates/footer.php";
  56. ?>
Go to the top of the page
+Quote Post
bobek358
post
Post #6





Grupa: Zarejestrowani
Postów: 143
Pomógł: 22
Dołączył: 17.11.2007

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


Bo nie
  1. ".$row['tempmax']."

a
  1. ".$row['max']."
lub
  1. ".$row[1]."


Ogólnie gdy odwołujesz się do funkcji w MySQL to kolumna nie nazywa się domyślnie, a trzeba jej nadać nazwę przez AS lub odwołać się po indeksie numerowanym od 0.

Ten post edytował bobek358 3.08.2015, 14:18:58
Go to the top of the page
+Quote Post
trueblue
post
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


CONCAT jest niepotrzebny, również LIMIT (bo i tak będą 3 rekordy w wyniku).
Zamiast LIKE proponuję:
  1. WHERE DATE(dzien)=CURDATE() /* jeśli dziś */
  2. WHERE DATE(dzien)='2015-01-01' /* jeśli dowolna data */


--------------------
Go to the top of the page
+Quote Post
bobek358
post
Post #8





Grupa: Zarejestrowani
Postów: 143
Pomógł: 22
Dołączył: 17.11.2007

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


Co do daty to ok, ale concat bym zostawił bo tak od razu w $row[0] ma nazwę miasta i nie musi się tym martwić na etapie wyświetlania.
Go to the top of the page
+Quote Post
trueblue
post
Post #9





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


To zauważ, że bez CONCAT również będzie mieć nazwę miasta. Ta funkcja jest tu zbyteczna.


--------------------
Go to the top of the page
+Quote Post
bobek358
post
Post #10





Grupa: Zarejestrowani
Postów: 143
Pomógł: 22
Dołączył: 17.11.2007

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


A w jaki sposób bo nie do końca rozumiem, zawsze używałem concata
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zamiast
SELECT CONCAT('choszczno'),
robisz
SELECT 'choszczno',


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
bobek358
post
Post #12





Grupa: Zarejestrowani
Postów: 143
Pomógł: 22
Dołączył: 17.11.2007

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


Ok nie zwróciłem nigdy uwagi ze to zadziała - dzięki smile.gif
Go to the top of the page
+Quote Post
brzanek
post
Post #13





Grupa: Zarejestrowani
Postów: 429
Pomógł: 0
Dołączył: 8.11.2012

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


Super wielkie dzięki działa.
A można do tego zrobić jakiś select z możliwością podania daty i wyświetlenia najwyższych temperatur dla wybranego dnia?
Go to the top of the page
+Quote Post
bobek358
post
Post #14





Grupa: Zarejestrowani
Postów: 143
Pomógł: 22
Dołączył: 17.11.2007

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


Oczywiście - dodaj sobie formularz i do pola select załaduj daty jakie masz w bazie, użyj DISTINCT aby nie dublować dat.
Później jak masz już dane w $_POST to dodaj do zapytania taką zmianę

  1. (SELECT 'choszczno', MAX(tempmax) AS max FROM fusionee445_warunki_choszczno WHERE dzien LIKE '".$_POST['DATA']." %')
  2. UNION
  3. (SELECT 'koszalin', MAX(tempmax) AS max FROM fusionee445_warunki_koszalin WHERE dzien LIKE '".$_POST['DATA']." %')
  4. UNION
  5. (SELECT 'drawsko', MAX(tempmax) AS max FROM fusionee445_warunki_drawsko WHERE dzien LIKE '".$_POST['DATA']." %') ORDER BY max DESC


Oczywiście nie zapomnij o filtrowaniu danych z formularza w razie w.

Ten post edytował bobek358 3.08.2015, 20:23:23
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 13:04