$result->num_rows ergibt 0

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • $result->num_rows ergibt 0

    Hallo zusammen,

    ich möchte per SQL Abfrage die Anzahl meiner gespeicherten tracert Routen herausfinden. Für das folgende Beispiel wäre das Ergebnis je eine Route mit mehreren Hops, zu 3 versch. Uhrzeiten = DREI Routen.




    Beim klicken auf eines der Targets wird die entsprechende Route angezeigt. Falls mehrere Routen vorhanden sind (im gewünschten Zeitraum) soll diese in einer neuen Spalte angezeigt werden (nur wenn abweichend).

    Daher will ich eben erst herausfinden, ob es mehrere Routen gibt, um sie dann zu vergleichen.
    PHP-Code:
    SELECT DISTINCT S.name AS routeS.target AS targetidS.record_timeD.idD.datetimeCOUNT(D.datetime) AS totalCountS.ipaddressS.average 
    FROM tbl_tracert_significant S 
    JOIN tbl_tracert_datetime D ON S
    .record_time D.id 
    JOIN tbl_tracert_target T ON S
    .target T.id 
    WHERE S
    .target AND D.datetime BETWEEN '2013-04-17 12:00:00' AND '2013-04-17 12:10:00'
    GROUP BY D.datetime 
    Das Ergebnis sieht wie folgt aus:



    Dazu der Code:
    PHP-Code:
    //new DB connection
        
    $database = @new mysqli(MYSQL_HOSTMYSQL_USERMYSQL_PWDMYSQL_DB);
        
        
    //OVERALL DB Query to find out how many routes we have 
        
    $general "SELECT DISTINCT S.name AS route, S.target AS targetid, S.record_time, D.id, COUNT(D.datetime) AS totalCount, D.datetime, S.ipaddress, S.average ";
        
    $general .= "FROM tbl_tracert_significant S ";
        
    $general .= "JOIN tbl_tracert_datetime D ON S.record_time = D.id ";
        
    $general .= "JOIN tbl_tracert_target T ON S.target = T.id ";
        
    $general .= "WHERE S.target = $targetId ";
        if(
    $from !== 'N/A' && $to !== 'N/A' ) {
        
    $general .= "AND D.datetime BETWEEN '$from' AND '$to'";
        }

        
    $general .= " GROUP BY D.datetime";
        
    //echo "$general <br />";
        
        
    $query $database->query($generalMYSQLI_USE_RESULT);
        
    $routeCount $query->num_rows;
        echo 
    "total routes: $routeCount <br />"
    Komischerweise ist das Ergebnis von $query->num_rows 0 anstatt 3. Ich habs dann auch mal mit fetch_row probiert, das gibt aber jedoch nur das Ergebnis von COUNT(xxxx), welches ja nicht gewünscht ist...

    Bin ich da total aufm Holzweg und es braucht eine ganz andere Herangehensweise?

    Grüße,

    Simon

    P.S. http://www.php-resource.de/forum/pro...tml#post666308

  • #2
    GELÖST: lag nur an dem MYSQL_USE_RESULT. Weggemacht, schon funktionierts

    Kommentar


    • #3
      Hmm, nun komm ich trotzdem nicht weiter. Ich schaffe es inzwischen diese 3 Zeiten in einem Array zu speichern, so dass ich auf diese Zeiten zugreifen kann. Jedoch weiß ich ja nie, wieviele Ergebnisse ich geliefert bekomme, so dass ich mir nicht vorstellen kann, wie ich nun für jedes einzelnes Ergebnis ein gesondertes Query baue und das dann ausgebe.

      Ich bin mal so frech und poste meine Ajax-Datei (163 Zeilen).

      Bisher war es nur auf ZWEI Routen ausgelegt, weshalb ich jetzt vor dem Problem stehe, mehrere Routen miteinander zu vergleichen [z.B. Route 1 und 2 sind gleich, jedoch 2 und 3 nicht -> Warnung anzeigen(per jQ gelöst)]

      PHP-Code:
      <?php

      require 'config.php';
      include_once 
      'class/Formatter.php';

      $targetId $_REQUEST['tid'];
      $target $_REQUEST['tname'];
      $from $_REQUEST['from'];
      $to $_REQUEST['to'];
          
          
      //new DB connection
          
      $database = @new mysqli(MYSQL_HOSTMYSQL_USERMYSQL_PWDMYSQL_DB);
          
          
      //OVERALL DB Query to find out how many routes we have 
          
      $general "SELECT DISTINCT S.name AS route, S.target AS targetid, S.record_time, D.id, COUNT(D.datetime) AS totalCount, D.datetime, S.ipaddress, S.average ";
          
      $general .= "FROM tbl_tracert_significant S ";
          
      $general .= "JOIN tbl_tracert_datetime D ON S.record_time = D.id ";
          
      $general .= "JOIN tbl_tracert_target T ON S.target = T.id ";
          
      $general .= "WHERE S.target = $targetId ";
          if(
      $from !== 'N/A' && $to !== 'N/A' ) {
          
      $general .= "AND D.datetime BETWEEN '$from' AND '$to'";
          }
          
      $general .= " GROUP BY D.datetime";
          
      //echo "$general <br />";
          
          
      $query $database->query($general);
          
      $routeCount $query->num_rows;
          
      //echo "total routes: $routeCount <br />";
          
          
      $time = array();
          
      $k 1;
          
      //generate array and fill with found datetimes
          
      for($i 0$i $routeCount$i++) {
          while(
      $count $query->fetch_object())
              
      $time[] = $count->datetime;
              echo 
      "time" $k++ . ":" $time[$i]. '<br />';
          }
          
          
      //new DB connection
          
      $db = @new mysqli(MYSQL_HOSTMYSQL_USERMYSQL_PWDMYSQL_DB);

          
      //FIRST DB Query to get all relevant data (Route One) 
          
      $sql "SELECT DISTINCT S.name AS route, S.target AS targetid, S.record_time, D.id, D.datetime, S.ipaddress, S.average ";
          
      $sql .= "FROM tbl_tracert_significant S ";
          
      $sql .= "JOIN tbl_tracert_datetime D ON S.record_time = D.id ";
          
      $sql .= "JOIN tbl_tracert_target T ON S.target = T.id ";
          
      $sql .= "WHERE S.target = $targetId ";
          if(
      $from !== '' && $from !== 'N/A') { //FIXME:replace with timestamp1
          
      $sql .= "AND D.datetime = '$from' ";
          } else {
          
      $sql .= 'AND S.record_time = (SELECT MAX(record_time) FROM tbl_tracert_significant WHERE target = ' $targetId ') ';
          }
          
      //echo "$sql <br />";
                  
          
      $result $db->query($sqlMYSQLI_USE_RESULT); 
          
          
      //new DB connection
          
      $connection = @new mysqli(MYSQL_HOSTMYSQL_USERMYSQL_PWDMYSQL_DB);
          
           
      //SECOND DB Query to get all relevant data (Route Two) 
          
      $statement "SELECT DISTINCT S.name AS route, S.target AS targetid, S.record_time, D.id, D.datetime, S.ipaddress, S.average ";
          
      $statement .= "FROM tbl_tracert_significant S ";
          
      $statement .= "JOIN tbl_tracert_datetime D ON S.record_time = D.id ";
          
      $statement .= "JOIN tbl_tracert_target T ON S.target = T.id ";
          
      $statement .= "WHERE S.target = $targetId "
          if(
      $to !== '' && $to !== 'N/A') { //FIXME:replace with timestamp2
          
      $statement.= "AND D.datetime = '$to' ";
          } else {
          
      $statement .= 'AND S.record_time = (SELECT MAX(record_time) FROM tbl_tracert_significant WHERE target = ' $targetId ') ';
          }
          
      //echo $statement; 
          
          
      $response $connection->query($statementMYSQLI_USE_RESULT);
          
          
      $route1 $result->fetch_array(MYSQLI_BOTH);
          
      $route2 $response->fetch_array(MYSQLI_BOTH);
          
      //$route3 = $answer->fetch_array(MYSQLI_BOTH);
          
          //table heads
          
      $headPosOne '<th style="background-color: #DFF0D8 !important">Route 1# to ' $target '</th><th class="ipaddress" style="background-color: #DFF0D8 !important">IP <small>' $from .'</small></th><th class="average" style="background-color: #DFF0D8 !important">Average Time</th>'//FIXME: change to timestamp 1
          
      $headNegOne '<th style="background-color: #F2DEDE !important">Route 1# to ' $target '</th><th class="ipaddress" style="background-color: #F2DEDE !important">IP <small>' $from .'</small></th><th class="average" style="background-color: #F2DEDE !important">Average Time</th>';
          
      $headPosTwo '<th style="background-color: #DFF0D8 !important">Route 2# to ' $target '</th><th class="ipaddress" style="background-color: #DFF0D8 !important">IP <small>' $to .'</small></th><th class="average" style="background-color: #DFF0D8 !important">Average Time</th>'//FIXME: change to timestamp 2
          
      $headNegTwo '<th style="background-color: #F2DEDE !important">Route 2# to ' $target '</th><th class="ipaddress" style="background-color: #F2DEDE !important">IP <small>' $to .'</small></th><th class="average" style="background-color: #F2DEDE !important">Average Time</th>';
          
      //$headPosThree = '<th style="background-color: #DFF0D8 !important">Route 2# to ' . $target . '</th><th class="ipaddress" style="background-color: #DFF0D8 !important">IP <small>' . $timeThree .'</small></th><th class="average" style="background-color: #DFF0D8 !important">Average Time</th>';
          //$headNegThree = '<th style="background-color: #F2DEDE !important">Route 2# to ' . $target . '</th><th class="ipaddress" style="background-color: #F2DEDE !important">IP <small>' . $timeThree .'</small></th><th class="average" style="background-color: #F2DEDE !important">Average Time</th>';
          
          //check if querys return the same result
          
      if($route1 === $route2) { 
          
          
      //check response for being empty
          
      if(empty($route1) && empty($route2)) { ?>
              <table class="table table-striped route-table empty">
              <?= $headNegOne ?>
                  <tr><strong><td>No Entries found!</td><td class="ipaddress" id="ipaddress">--</td><td class="average">--</td></strong></tr>
              </table>
          <!-- else print positive table -->
      <?php    } else { ?>
              <table class="table table-striped route-table positive">
              <?= $headPosOne ?>
          <?php while($row $result->fetch_object()) { ?>
              <tr><td><?= Formatter::CheckForTimeOut($row->route?></td><td class="ipaddress" id="ipaddress"><?= $row->ipaddress ?></td><td class="average"><?= Formatter::MillisecondToSecond($row->average?> ms</td></tr>

      <?php          
          } 
      ?>
              </table>
          
      <!-- check if second query returns null or empty -->
      <?php  } elseif(empty($route2) || is_null($route2)) { ?>
          <span>
          <table class="table table-striped route-table negative">
              <?= $headNegOne ?>
          <?php   while($row $result->fetch_object()) { ?>
                  <tr><td><?= Formatter::CheckForTimeOut($row->route?></td><td class="ipaddress" id="ipaddress"><?= $row->ipaddress ?></td><td class="average"><?= Formatter::MillisecondToSecond($row->average?> ms</td></tr>
        
      <?php          ?>
          </table>
          <table class="table table-striped route-table2 negative empty">
              <?= $headNegTwo ?>
              <tr><strong><td>No Entries found!</td><td class="ipaddress" id="ipaddress">--</td><td class="average">--</td></strong></tr>
          </table>
          </span>


      <!-- check if first query returns null or empty -->
      <?php } elseif(empty($route1) || is_null($route1)) { ?>
              <span>
          <table class="table table-striped route-table negative empty">
              <?= $headNegOne ?>
              <tr><strong><td>No Entries found!</td><td class="ipaddress" id="ipaddress">--</td><td class="average">--</td></strong></tr>
          </table>
          <table class="table table-striped route-table2 negative">
              <?= $headNegTwo ?>
          <?php while($res $response->fetch_object()) { ?>
            <tr><td><?= Formatter::CheckForTimeOut($res->route?></td><td class="ipaddress" id="ipaddress"><?= $res->ipaddress ?></td><td class="average"><?= Formatter::MillisecondToSecond($res->average?> ms</td></tr>
        
      <?php          ?>
          </table>
          </span>

      <!-- Routes differ, so show both routes -->
      <?php } else { ?>
          <span>
              <table class="table table-striped route-table negative">
              <?= $headNegOne ?>
              <?php   while($row $result->fetch_object()) { ?>
                      <tr><td><?= Formatter::CheckForTimeOut($row->route?></td><td class="ipaddress" id="ipaddress"><?= $row->ipaddress ?></td><td class="average"><?= Formatter::MillisecondToSecond($row->average?> ms</td></tr>

          <?php          ?>
              </table>
              <table class="table table-striped route-table2 negative">
              <?= $headNegTwo ?>
              <?php while($res $response->fetch_object()) { ?>
              <tr><td><?= Formatter::CheckForTimeOut($res->route?></td><td class="ipaddress" id="ipaddress"><?= $res->ipaddress ?></td><td class="average"><?= Formatter::MillisecondToSecond($res->average?> ms</td></tr>

          <?php          ?>
              </table>
          </span>

      <?php    }  
          
          
      $database->close();
          
      $connection->close(); 
          
      $db->close();?>
      Bin für jede/n Kritik, Hinweis, Tip, Wegweiser dankbar!

      P.S. könnte ein Mod netterweise das Thema ins PHP Developer Forum verschieben?
      Zuletzt geändert von b1p; 06.05.2013, 15:31.

      Kommentar

      Lädt...
      X