Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Blättern mit 2 MySQL Querys...

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Blättern mit 2 MySQL Querys...

    Moin,

    also, zu dem arbeitsgrund:
    Ich lese Daten aus einer MySQL Datenbank aus. Dazu benötige ich 2 Querys, daher ich erst alles auslese, was nicht älter als 7 Tage ist und dann das, was älter als 7 Tage ist. Ich brauche dafür 2 Querys, daher ich es innerhalb immer nach der Spalte klick ordnen möchte und das neue nach dem Timestamp! Hier die Querys...(vielleicht kann das ja wer verienfachen)

    Code:
    $timeneu = time()-60*60*24*7;
    $newsql = "SELECT * FROM phparchiv WHERE katnummer='$kat' AND timestamp > $timeneu ORDER BY timestamp DESC";
    	$newresult = mysql_query($newsql) OR die(mysql_error());
    	$newsql2 = "SELECT * FROM phparchiv WHERE katnummer='$kat' AND timestamp <= $timeneu ORDER BY klick DESC";
    	$newresult2 = mysql_query($newsql2) OR die(mysql_error());
    Soweit so gut....jetzt soll in das ganze eine Blätterfunktion rein! Mit einem Ergebnis kein Problem, aber mit 2 Ergebnissen wird kompliziert. Jemand eine Idee? Es sollen jeweils 10 Einträge pro Seite angezeigt werden! Aber daher das result vom 1. und 2. Query ja gleichzeitig angezeigt wird...weiß ich nicht, wie ich das anstellen soll!

    wilko

  • #2
    1. das ist keine Frage eines Profis
    2. überarbeite Dein Konzept noch mal. Der Sinn einer "Blätterfunktion" liegt ja genau darin, ein "Ergebnisfenster" zu verschieben. Deine Einteilung in "jünger als 7 Tage" und "älter als 7 Tage" trifft so oder so auf jeden Eintrag zu.

    -> moved to Anfänger Forum.

    Kommentar


    • #3
      naja...
      wie meinst du das mit Konzept überarbeiten? Ich bin am überlegen ob dafür 2 Querys notwendig sind....aber ich weiß nicht, wie es mit einem gehen soll!

      Zitat von meikel
      Deine Einteilung in "jünger als 7 Tage" und "älter als 7 Tage" trifft so oder so auf jeden Eintrag zu.
      Verstehe ich nicht! Jeder Eintrag ist entweder jünger oder älter!

      wilko

      Kommentar


      • #4
        Zitat von wilko
        wie meinst du das mit Konzept überarbeiten? Ich bin am überlegen ob dafür 2 Querys notwendig sind....aber ich weiß nicht, wie es mit einem gehen soll!
        Naja, genaugenommen Du willst aus einer Menge Tupel eine "Blätterfunktion" basteln: ... LIMIT $start, $anzahl

        Im Weiteren willst Du (warum auch immer) bei der Ausgabe wissen, ob der Eintrag jünger oder älter als 7 Tage ist. Das kannst Du mit PHP klären:
        if ($row['datum'] < $heute_vor_7tagen) ...

        Verstehe ich nicht! Jeder Eintrag ist entweder jünger oder älter!
        Eben. Die beiden Abfragen bewirken letztendlich nur, daß das, was bei Query1 nicht erwischt wird, dann bei Query2 kommt.

        Damit erschwerst Du Dir aber unnötig die "Blätterfunktion".

        Kommentar


        • #5
          Ich glaube wir haben ein kleines Verständnisproblem!

          Wenn ich alles mit einem Query abrufen würde, könnte ich es emtweder nach dem Timestamp sortieren, oder nach dem feld klick! Ich will aber alles, was jünger als sieben Tage ist oben haben und nach timestamp sortiert! Was älter ist soll unten erscheinen und nach klick sortiert sein. Das geht soweit ich MySQL kenne nicht mit 2 Abfragen!

          Wie man eine Blätterfunktion macht, wenn man einen Query hat, weiß ich. aber mit zweien wirds schwierig, ich hatte nach Ansätzen gefragt!

          wilko

          Kommentar


          • #6
            @wilko
            >Ich glaube wir haben ein kleines Verständnisproblem!

            Offenbar. Allerdings bin ich unschuldig.

            >Wenn ich alles mit einem Query abrufen würde, könnte ich es emtweder nach dem Timestamp sortieren, oder nach dem feld klick!

            1. who the fuck is feld klick?
            2. wenn Du 'blättern' willst, warum selektierst Du eigentlich nicht das, was Du brauchst? Oder willst Du zwei Blätterfunktionen: eine für das neue und eine für das alte Zeuch?

            Die Frage, was wo und wie gePRINTet wird, dürfte doch absolut keine Hürde sein: einfach Ausgaben in Variablen sammeln.

            Kommentar


            • #7
              Zitat von meikel
              Offenbar. Allerdings bin ich unschuldig.
              Das tut doch nix zur Sache.

              Zitat von meikel
              1. who the fuck is feld klick?
              Ein Int-Feld, mit einer Zahl!

              [quote="meikel"]2. wenn Du 'blättern' willst, warum selektierst Du eigentlich nicht das, was Du brauchst? Oder willst Du zwei Blätterfunktionen: eine für das neue und eine für das alte Zeuch? [/quode
              Ich gebe zur Zeit das neue und das alte untereinander aus. Das soll so bleiben, nur sollen pro Seite halt nur 10 Beiträge angezeigt werden!

              In zwischen, habe ich eine Lösung für das Problem.
              Ich speichere die Ergebnisse beider Abfragen in ein Array:

              Code:
              $timeneu = time()-60*60*24*7;
              	$newsql = "SELECT * FROM phparchiv WHERE katnummer='$kat' AND timestamp > $timeneu ORDER BY timestamp DESC";
              	$newresult = mysql_query($newsql) OR die(mysql_error());
              	$newsql2 = "SELECT * FROM phparchiv WHERE katnummer='$kat' AND timestamp <= $timeneu ORDER BY klick DESC";
              	$newresult2 = mysql_query($newsql2) OR die(mysql_error());
              
              $i = "0";
              while($array = mysql_fetch_assoc($newresult))
              {
              $ergarray[$i] = $array;
              $i++;
              }
              while($array = mysql_fetch_assoc($newresult2))
              {
              $ergarray[$i] = $array;
              $i++;
              }
              Schön und gut, damit kann ich jetzt z.B. so weiterarbeiten:

              Code:
              $zahl = count($ergarray);
              $proseite = "10";
              if(!$pos) $pos="0";
              $anzeigen = $pos + $proseite;
              //blätterstart
              echo "<span style=\"font-family:Arial;font-size:10pt;\">";
              if($zahl>$proseite AND $anzeigen>$proseite)
              {
              $zurueck = $pos - $proseite;
              echo "<a href=\"http://www.ptw-server.de/index.php?seite=phparchiv2&kat=".$kat."&pos=".$zurueck."\">Zurück</a> ";
              }
              if($zahl>$proseite)
              {
              $seiten = ceil($zahl / $proseite);
              for($u=1;$u<=$seiten;$u++)
              {
              $gehe = ($u - 1) * $proseite;
              if($pos == $gehe) echo "<span style=\"font-weight: bold;\">";
              echo "<a href=\"http://www.ptw-server.de/index.php?seite=phparchiv2&kat=".$kat."&pos=".$gehe."\">[".$u."]</a> ";
              if($pos == $gehe) echo "</span>";
              }
              }
              if($zahl>$proseite AND $anzeigen<$zahl)
              {
              echo "<a href=\"http://www.ptw-server.de/index.php?seite=phparchiv2&kat=".$kat."&pos=".$anzeigen."\">Weiter</a>";
              }
              echo "</span>";
              //blätterende
              $n = "1";
              for($i=$pos;$i<$anzeigen;$i++)
              {
              if($ergarray[$i] != "")
              {
              // Ausgabe mit ergarray[$i][feld]!
              }
              }
              Mein Problem, ich rufe immer alle Einträge aus der Kategorier ab....das ist bei max 10 anzeigen pro Seite eigentlich unnötig...aber daher ich die wegen der Blätterfunktion doch alle brauch, stecke ich jetzt fest! Wie kann ich nur das benötigte Material abrufen! Mit LIMIT, ja....aber was soll ich da angeben, wie kann ich das errechnen!

              wilko

              Kommentar


              • #8
                Zitat von wilko
                Zitat von meikel
                2. wenn Du 'blättern' willst, warum selektierst Du eigentlich nicht das, was Du brauchst? Oder willst Du zwei Blätterfunktionen: eine für das neue und eine für das alte Zeuch?
                Ich gebe zur Zeit das neue und das alte untereinander aus. Das soll so bleiben, nur sollen pro Seite halt nur 10 Beiträge angezeigt werden!
                Noch mal: Betrifft das
                a. 10 alte *und* 10 neue Beiträge
                oder betrifft das
                b. 10 Beiträge insgesamt?

                Falls a:
                2 Querys. In die WHERE Klausel (ähnlich der von b) dann zusätzlich noch die "Datumsgrenze" reinpacken.

                Falls b:
                mit
                SELECT ... WHERE id<= $id LIMIT 0,10 ORDER BY datum DESC
                10 Beiträge abholen. Bei der Ausgabesammlung fragst Du einfach ab, ob datum < heute - 7Tage ist.

                In beiden Fällen benötigst Du für die Blätterfunktion noch die ID des ersten und des letzten Beitrages.
                SELECT MIN(id) AS erster, MAX(id) AS letzter FROM...

                Kommentar


                • #9
                  A ist der Fall!

                  Aber danke für den ID ansatz!

                  wilko

                  Kommentar


                  • #10
                    eh b ist der fall

                    wilko

                    Kommentar

                    Lädt...
                    X