abfrage: die letzten 10 aber asc

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

  • #16
    Original geschrieben von skys
    denn daraus erkenne ich, wofür n, n.a, a etc stehen. das hatte ich bei asp2php leider nicht verstanden :
    ich denke, dann müßte das stimmen, sofern
    - tabelle a = tabmitgl
    - tabelle b = tabanzeig
    Das kann ja nicht sein, in deinem Beispiel und in allen andern hier geht es nur um eine Tabelle. Und die Abfrage von asp2php würde dann so
    PHP-Code:
    SELECT 
        n
    .ktnr
        
    n.name,    
        
    n.zeit 
    FROM  
    (
        
    SELECT 
            ktnr

            
    name
            
    zeit 
        FROM
            tab 
        ORDER BY
            zeit DESC
        LIMIT 5

    ORDER BY 
        n
    .zeit ASC
    heissen. Einfach so zur Erklärung: Zuerst wird die innere Abfrage abgesetzt, und dann aus diesem Resultat noch die äussere.
    Zuletzt geändert von H2O; 19.02.2008, 09:00.
    Gruss
    H2O

    Kommentar


    • #17
      Original geschrieben von wentz
      Schrott ist meine Lösung keines wegs mit etwas überlegen sollte er daraus auch die ersten 5 oder 10 Selectieren können!
      Original geschrieben von Skrok
      Ich denke schon, bzw. ich weiss gar nicht was ihr da macht. An ne Anzahl von Datensätzen kömm ich auch einfacher .....
      OffTopic:

      immer diese Noobs mit ihrem Halbwissen ... wie wär's mit Lesen lernen, denn wer lesen kann ist klar im Vorteil

      Kommentar


      • #18
        Original geschrieben von asp2php
        OffTopic:

        immer diese Noobs mit ihrem Halbwissen ... wie wär's mit Lesen lernen, denn wer lesen kann ist klar im Vorteil
        Ähpffff :P Noobs mit Halbwissen ... :P ... ich bin halt gerne Noob ... sagt mein chef auch immer *g*

        Kommentar


        • #19
          Warum so umständlich....

          Hol Dir die letzten X Beiträge mit "DESC" aus der Tabelle.
          Schreibe die Ergebnismenge in ein Array und sortier das danach einfach ASC nach "id".
          (Ich unterstelle nun einfach mal, dass die höchste ID auch der neueste Eintrag ist)

          Da Deine zu sortierende Ergebnismenge überschaubar ist wird das wohl die schnellste Methode sein....

          Kommentar


          • #20
            Die Datenbank macht das mit den genannten Queries bereits für dich, wahrscheinlich auch um einiges Fixer!

            Kommentar


            • #21
              hallo,

              @ skrok,
              tröstlich, daß noch jemand nicht versteht, was hier teilweise steht.
              auch wenn dein beispiel evtl nicht die lösung zu meiner frage wäre, würde ich dich gerne später mal noch dazu fragen, um deinen code zu verstehen.

              @ all zur erinnerung:
              ich bin nicht fit in php und das heißt, ich kann euch nicht auf eurem niveau des php-wissens abholen, sondern bin darauf angewiesen, daß ihr mich auf meinem niveau des php-wissens abholen könnt.

              @ jonas01
              Hol Dir die letzten X Beiträge mit "DESC" aus der Tabelle. Schreibe die Ergebnismenge in ein Array und sortier das danach einfach ASC nach "id".
              danke, das war vom deutsch her verständlich - aber umsetzen in php kann ich es nicht, da ich mit arrays bisher noch kaum erfahrungen habe.

              @ H2O
              Das kann ja nicht sein, in deinem Beispiel und in allen andern hier geht es nur um eine Tabelle.
              bei mir auch – ich wunderte mich, da ich den eindruck hatte, bei euch ginge es um zwei.

              Einfach so zur Erklärung: Zuerst wird die innere Abfrage abgesetzt, und dann aus diesem Resultat noch die äussere.
              das habe ich jetzt verstanden, danke. auch für dein beispiel.

              PHP-Code:
              SELECT 
                  n
              .ktnr
                  
              n.name,    
                  
              n.zeit 
              FROM  
              (
                  
              SELECT 
                      ktnr

                      
              name
                      
              zeit 
                  FROM
                      tab 
                  ORDER BY
                      zeit DESC
                  LIMIT 5

              ORDER BY 
                  n
              .zeit ASC
              habe dieses versucht umzusetzen (also ein subselect bei nur einer tabelle), aber bekomme nur eine weiße seite :

              PHP-Code:
              <?php
              include("incl.php");

              $abfrage mysql_query "SELECT tabA.ktonr, tabA.name, tabA.zeit
              FROM  ( SELECT ktonr, name, zeit 
              FROM tabA ORDER BY zeit DESC LIMIT 5 ) tabA 
              ORDER BY tabA.zeit ASC"
              ;

              $ergebnis mysql_query($abfrage);

              ?>

              <div align="center"><b>Tabelle</b></div>
              <br>

              <table width="100%">
              <tr>
               <td width="20%">KtoNr</td>
               <td width="50%">Name</td>
               <td width="30%">Zeit</td>
              </tr>
              </table>
              <hr noshade size="1">

              <?php
              while ($row mysql_fetch_object($ergebnis)
              {
              ?>

              <table width="100%">
              <tr>
               <td width="20%">
               <?php
               
              echo $row->ktonr;
               
              ?>
               </td>
               <td width="50%">
               <?php
               
              echo $row->name;
               
              ?>
               </td>
               <td width="30%">
               <?php
               
              echo date("d.m.Y - H:i a"$row->zeit);
               
              ?>
               </td>
              </tr>
              </table>

              <?php

              }
              @
              mysql_close($connect);
              ?>
              nur warum ?

              viele grüße, skys

              Kommentar


              • #22
                mach mal

                PHP-Code:
                $ergebnis mysql_query($abfrage)or die(mysql_error()); 
                und schau mal obs ne Fehlermeldung gibt.

                Gruß
                Jan

                Kommentar


                • #23
                  leider keine fehlermeldung, aber trotzdem danke, weil nicht dran gedacht hatte

                  Kommentar


                  • #24
                    Eigentlich müsste das gehen. Der Alias tabA ist allerdings etwas unglücklich gewählt, da er gleich ist, wie der Tabellenname. Es spielt zwar nicht wirklich eine Rolle, aber jeder andere Name wäre weniger verwirrend und wenn es nur xx ist.
                    PHP-Code:
                    SELECT 
                        ktonr
                    ,
                        
                    name
                        
                    zeit
                    FROM  

                        
                    SELECT 
                            ktonr

                            
                    name
                            
                    zeit 
                        FROM 
                            tabA 
                        ORDER BY 
                            zeit DESC 
                        LIMIT 5 
                    xx
                    ORDER BY 
                        zeit ASC 
                    Um das zu testen kopierst du zuerst mal die innere Abfrage ins SQL-Feld von PHPMyAdmin und schaust, was ausgegeben wird. Anschliessend machst du das Gleiche mit der ganzen Abfrage.
                    Und den Hinweis von Skrok solltest du bei allen Abfragen berücksichtigen.
                    Das ist übrigens nicht mein Beispiel, sondern jenes von asp2php . Dasjenige mit meiner Abfrage habe ich ja schon früher konkretisiert. Aber ich glaube, diese ist einfacher.
                    Gruss
                    H2O

                    Kommentar


                    • #25
                      PHP-Code:
                      $abfrage mysql_query "SELECT tabA..."
                      Das mysql_query gehört hier nicht hin!

                      Setzt mal an den Beginn deiner Datei:
                      PHP-Code:
                      error_reportingE_ALL );
                      ini_set'display_errors''On' ); 
                      dann solltest du sicher ein paar Fehlermeldungen sehen!

                      Kommentar


                      • #26
                        dankeeeeee

                        erstmal : per sql klappt beides problemlos

                        aber das viel entscheidendere :
                        ich hatte es die ganze zeit ganz anders verstanden, teils dachte ich, die variablen müßten tabellennamen sein oder etwas bestimmtes, was ich eben nicht wußte.


                        dämpfer dennoch : per php-datei, erhalte ich nur eine weiße seite, trotz error reporting etc. das ist der code :

                        PHP-Code:
                        <?php
                        error_reporting
                        E_ALL );
                        ini_set'display_errors''On' );

                        include(
                        "incl.php");

                        $abfrage "SELECT ktonr, name, zeit FROM 
                        ( SELECT ktonr, name, zeit FROM taba ORDER BY zeit DESC LIMIT 5 ) 
                        xx ORDER BY zeit ASC"
                        ;

                        $ergebnis mysql_query($abfrage)or die(mysql_error());
                        ?>

                        <body>
                        <div align="center"><b>Tabelle</b></div>
                        <br>

                        <table width="100%">
                        <tr>
                         <td width="20%">KtoNr</td>
                         <td width="50%">Name</td>
                         <td width="30%">Zeit</td>
                        </tr>
                        </table>
                        <hr noshade size="1">

                        <?php
                        while ($row mysql_fetch_object($ergebnis)
                        {
                        ?>

                        <table width="100%">
                        <tr>
                         <td width="20%">
                         <?php
                         
                        echo $row->ktonr;
                         
                        ?>
                         </td>
                         <td width="50%">
                         <?php
                         
                        echo $row->name;
                         
                        ?>
                         </td>
                         <td width="30%">
                         <?php
                         
                        echo date("d.m.Y - H:i a"$row->zeit);
                         
                        ?>
                         </td>
                        </tr>
                        </table>
                        </body>

                        <?php
                        }
                        @
                        mysql_close($connect);
                        ?>
                        noch eine frage für später :
                        kann ich ini_set( 'display_errors', 'On' ); genauso auch wieder off setzen : ini_set( 'display_errors', 'Off' ); ?

                        immerhin mal wieder ein lichtblick

                        Kommentar


                        • #27
                          kann ich ini_set( 'display_errors', 'On' ); genauso auch wieder off setzen : ini_set( 'display_errors', 'Off' ); ?
                          Jep, das kannst du machen!

                          Du wirst dein Skript ein wenig debuggen müssen. Den Code teilweise auskommentieren und mit Testausgaben nach der Stelle suchen, wo das Skript nichts mehr tut!

                          Kommentar


                          • #28
                            hallo,

                            nochmal eine kleine nachfrage zu
                            ini_set( 'display_errors', 'On' ); bzw ini_set( 'display_errors', 'Off' );

                            inwiefern ist das hinsichtlich der sicherheit relevant ?
                            ich meine mal gelesen zu haben, daß off besser sei, damit nicht jeder bei einem fehler auch gleich alle informationen aufgetischt bekommt, noch dazu evtl solche, die ihn gar nix angehen.

                            stimmt das so oder wie siehts damit aus ?

                            viele grüße, skys

                            Kommentar


                            • #29
                              Original geschrieben von skys

                              @ jonas01

                              danke, das war vom deutsch her verständlich - aber umsetzen in php kann ich es nicht, da ich mit arrays bisher noch kaum erfahrungen habe.
                              Hi!

                              So habe ich das ungefähr gemeint....


                              PHP-Code:
                              <?
                              $sql="SELECT id,spalte_a,spalte_b,spalte_c FROM tabelle ORDER BY id DESC LIMIT 0,15";
                              $res=mysql_query($sql)or die(mysql_error());
                              while($row=mysql_fetch_array($res)){
                                  $id_arr[]=$row['id'];
                                  $spaltea_arr[]=$row['spalte_a'];
                                  $spalteb_arr[]=$row['spalte_b'];
                                  $spaltec_arr[]=$row['spalte_c'];
                              }
                              /* Nun sind die Werte im Array... das Array können wir nun "rückwärts ausgeben".

                              */

                              $backcount_start=count($id_arr)-1; // Wird immer, sofern mindestens 15 Datensätze vorhanden, 14 ergeben.

                              while($backcount_start>=0){
                                  echo $id_arr[$backcount_start]."<br>";
                                  echo $spaltea_arr[$backcount_start]."<br>";
                                  echo $spalteb_arr[$backcount_start]."<br>";
                                  echo $spaltec_arr[$backcount_start]."<br>";
                                  
                                  $backcount_start--; // Schleife wird exakt 15mal durchlaufen
                                  
                                  
                              }

                              ?>

                              Kommentar


                              • #30
                                hi jonas01,

                                vielen dank ! (aber da wäre ich längst nicht drauf gekommen)

                                und vor allem : es funktioniert
                                sogar fehlermeldungen bekam ich dieses mal, weil ich etwas kleines vergessen hatte

                                nun versuche ich es noch zu begreifen für ein evtl nächstes mal.

                                $row=mysql_fetch_array($res)
                                ist das so also der normalfall, wie ich ein array übergebe ?

                                $id_arr[]=$row['id'];
                                weshalb wird eigentlich immer row für so viele variablen genommen ?
                                nur, weil es zeile heißt ? (dachte anfangs mal, es müßte row heißen)

                                warum passiert nichts, wenn ich das back weglasse ?
                                ich hätte gedacht, dann würde es vielleicht wieder andersrum sortieren :
                                PHP-Code:
                                $backcount_start=count($id_arr)-1// Wird immer, sofern mindestens 15 Datensätze vorhanden, 14 ergeben.

                                while($backcount_start>=0){
                                    echo 
                                $id_arr[$backcount_start]."<br>";
                                    echo 
                                $spaltea_arr[$backcount_start]."<br>";
                                    echo 
                                $spalteb_arr[$backcount_start]."<br>";
                                    echo 
                                $spaltec_arr[$backcount_start]."<br>";
                                    
                                    
                                $backcount_start--; 
                                im php manual steht nur etwas über count, aber backcount_start ist schon ein feststehender begriff, oder ?

                                $backcount_start>=0 nur, weil die id bei 1 anfängt zu zähen oder ?
                                dh die erste LIMIT-parameter 0 hat mit der schlußendlichen aufzählung eigentlich gar nichts mehr zu tun (sondern eben nur mit der ersten sortierung) ?
                                und die while-schleife bewegt sich nur innerhalb der LIMIT-angaben, eben dem zuvor abgerufenen query *laut denk*

                                $backcount_start--; // Schleife wird exakt 15mal durchlaufen
                                -- ist also genau x-mal durchlaufen.
                                demnach könnte man hier auch etwas wie zb nur 8x durchlaufen angeben ?
                                wie müßte das heißen ? $backcount_start 8; anscheinend nicht.

                                dank dir sehr für deine arbeit

                                viele grüße, skys

                                Kommentar

                                Lädt...
                                X