2016-11-02 3 views
-2

Ich blieb stecken in Erstellen einer Unterabfrage in meiner Abfrage (MySQL).Abfrage/Unterabfrage Problem in MySQL

Tabellenname: log2016

Datensatz begann im Oktober und die Tabelle wie folgt aussieht:

| Date    | Temp | Hum | Cond   | 
| 2016-10-01 14:03:40 | 13.6 | 60 | cloudy  | 
| 2016-10-15 00:07:37 | 10.1 | 81 | partly cloudy | 
    ... 
| 2016-11-02 13:47:22 | 12.8 | 74 | partly cloudy | 
    ... 

Zunächst einmal ich alle Daten von 2016-10-01 00:00:00 bis 2016-11-01 00:00:00 auswählen möchten.

WHERE-Klausel:

WHERE `Date` < '2016-11-01 00:00:00' 

Zweitens möchte ich die Zeile "Cond" wie folgt wählen:

$query = "SELECT `Cond`, COUNT(`Cond`) AS `Anz` FROM `log2016` GROUP BY `Cond`"; 

Diese Abfrage funktioniert gut, aber wenn ich legte die WHERE-Klausel in dieser Abfrage wie z.B

$query = "SELECT `Cond`, COUNT(`Cond`) AS `Anz` FROM `log2016` WHERE `Date` < '2016-11-01 00:00:00' GROUP BY `Cond`"; 

es wird nicht funktionieren.

Ich googelte viel und versuchte auch verschiedene Dinge, um mein Problem zu lösen, aber nichts funktionierte.

EDIT:

Hier ist der gesamte Code:

<?php 

include_once("../../mysql/Wetterdatenlogger.php"); 
include_once("Wetter_2016.php"); 

    if (isset ($_GET['Periode']) && $_GET['Periode'] == 'ALL ') 
     {   
      $query = "SELECT `Wetter`, COUNT(`Wetter`) AS `Anzahl` FROM `log2016` GROUP BY `Wetter`";     
      $result = mysqli_query($db_link_Wetter, $query); 

      while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) 
       { 
        $Wetter1 = $row['Wetter']; 
        $Wetter = "'".$Wetter1."'"; 
        $Anz = $row['Anzahl']; 

        $data[] = "[$Wetter, $Anz]"; 
       } 
     } 

    if (isset ($_GET['Periode']) && $_GET['Periode'] == 'OKT.') 
     {  
      $query = "SELECT `Wetter`, COUNT(*) AS `Anzahl` FROM 
          (
          SELECT * FROM `log2016` WHERE `Datum/Zeit` < '2016-11-01 00:00:00' 
         ) 
         GROUP BY `Wetter`" ; 

      $result = mysqli_query($db_link_RPI_1, $query); 

      while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) 
       { 
        $Wetter1 = $row['Wetter']; 
        $Wetter = "'".$Wetter1."'"; 
        $Anz = $row['Anzahl']; 

        $data[] = "[$Wetter, $Anz]"; 
       } 
     } 
?> 

JavaScript:

<script type="text/javascript"> 
    $(function() { 
     $('#container8').highcharts({ 
      chart: { 
       type: 'pie', 
       options3d: { 
        enabled: true, 
        alpha: 45, 
        beta: 0 
       } 
      }, 
      title: { 
       text: 'Wetter 2016' 
      }, 
      tooltip: { 
       pointFormat: '{series.name}: <b>{point.percentage:.2f}%</b>' 
      }, 
      plotOptions: { 
       pie: { 
        allowPointSelect: true, 
        cursor: 'pointer', 
        depth: 35, 
        dataLabels: { 
         enabled: true, 
         format: '{point.name}' 
        } 
       } 
      }, 
      series: [{ 
       type: 'pie', 
       name: 'Wetter 2016', 
       data: [<?php echo join($data, ',') ?>] 
      }] 
     }); 
    }); 
    </script> 

HTML:

<form method="GET" id="choice" class="Wetter" action="Wetter_get_data_2016.php"> 
      <br> 
      <input type="submit" name="Periode" value="OKT." class="input_Wetter"> 
      <input type="submit" name="Periode" value="NOV." class="input_Wetter"> 
      <input type="submit" name="Periode" value="DEZ." class="input_Wetter"> 
      <input type="submit" name="Periode" value="ALL " class="input_Wetter"> 
     </form> 

     <script src="https://code.highcharts.com/highcharts.js"></script> 
     <script src="https://code.highcharts.com/highcharts-3d.js"></script> 
     <script src="https://code.highcharts.com/modules/exporting.js"></script> 

     <div id="container8" style="height: 400px"></div> 

Ausgang für „ALL“:

chart

Ausgang für „OKT“ - nichts angezeigt wird

+1

Bitte zeigen Sie Ihre gewünschte Ausgabe. –

+1

was bedeutet nicht funktioniert? Error? Falsches Ergebnis? –

+1

Was meinst du mit id nicht funktionieren? Erhalten Sie falsche Daten? Wenn ja, zeigen Sie uns Beispieldaten mit der aktuellen Ausgabe und der gewünschten Ausgabe an. Erhalten Sie irgendeine Ausnahme? Wenn ja, zeigen Sie uns die Ausnahme. Bist du...? – Rumpelstinsk

Antwort

1

Ich würde vorschlagen, ein inneres wählen Sie mit dem Datum Filterung zu machen, und das äußere wählen mit der Gruppierung, so etwas wie:

SELECT Cond, COUNT(*) AS Anz FROM 
    (
    SELECT * FROM log2016 WHERE Date < '2016-11-01 00:00:00' 
) 
GROUP BY Cond ; 
+0

warum brauchen Sie das? –

+0

Du meinst es in innere/äußere Selektionen aufteilen, oder? Es gibt keinen besonderen Grund außer zu überprüfen, dass das Grundkonzept der Abfrage korrekt ist. Wenn dies das richtige und gewünschte Ergebnis liefert, kann die Abfrage zu einer einzelnen Anweisung umformuliert werden. Sehen? Wenn Sie die Abfrage auf diese Weise durchführen, können Sie einfach die innere Abfrage und dann die vollständige Abfrage testen (manchmal verwende ich diese Methode zum Debuggen meines eigenen Codes). – FDavidov

+0

Danke für Ihre Hilfe, aber leider hat das nicht funktioniert. – Guapa

0

(Geschrieben im Auftrag des OP).

Problem ist gelöst - es gab eine "Kopie & Paste" Fehler in meinem Code.

Abfrage funktioniert jetzt.

Danke an alle Helfer!