Ankündigung

Einklappen
Keine Ankündigung bisher.

Datensätze aus 2 Querys in eine Variable für While-Schleife

Einklappen

Neue Werbung 2019

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

  • Datensätze aus 2 Querys in eine Variable für While-Schleife

    Hi,

    ich möchte aus einer mysql-db Geburtsdaten auslesen.
    Dafür habe ich im ersten Query deklariert, dass ich alle Datensätze auslesen möchte, deren Wert größer ist, als gestern (bezüglich Tag, Monat). Im zweiten Query möchte ich alle Datensätze vom 01.01. bis gestern auslesen, sprich:

    PHP-Code:
    $sql_von mysql_query('SELECT * FROM `benutzer` WHERE `geburtstag` >= "'.$month.$day.'" ORDER BY `geburtstag`, `nachname`');
    $sql_bis mysql_query('SELECT * FROM `benutzer` WHERE `geburtstag` < "'.$month.$day.'" ORDER BY `geburtstag`, `nachname`'); 
    Bedeutet: 2 Querys - 2 While-Schleifen, um die Daten auszugeben.

    Wie bekomme ich jetzt die Datensätze des 2. Querys an das Ende vom Array des 1. Querys?

    Danke im Voraus!

    LG,
    Paeisi


  • #2
    PHP: array_merge - Manual

    EDIT: aber kannst du da nicht irgendwie mit between arbeiten in SQL query? oder die Querys kombinieren??
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

    Kommentar


    • #3
      Sauberer wäre es natürlich, wenn ich einen Query hätte. Ich glaube, ich habe eine Idee.

      Ich könnte doch alle Datensätze auslesen mit Sortierung, wie bisher und dann mittels einer if-Abfrage trennen.

      PHP-Code:
      while ($row mysql_fetch_array($sql)) {
        if (
      $row['geburtsdatum'] >= $month.$day) {
          echo 
      'Ich bin größer, als gestern';  
        }
        elseif (
      $row['geburtsdatum'] < $month.$day) {
          echo 
      'Ich bin zwischen dem 01.01. und gestern';
        }

      Sollte gehen, oder?^^

      Wie gut, dass ich erst gefragt und dann nachgedacht habe...

      Kommentar


      • #4
        Und was soll das bringen? Liest Du dann nicht _alle_ Datensätze aus?
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Stimmt, dann ist die Sortierung ja trotzdem wieder nicht die beabsichtigte.

          Aber wie soll ich die Bedingung in einen Query packen? Dafür muss ich wohl ein ernstes Wörtchen mit ORDER BY sprechen, oder nicht?

          Kommentar


          • #6
            Zitat von Paeisi Beitrag anzeigen
            Stimmt, dann ist die Sortierung ja trotzdem wieder nicht die beabsichtigte.

            Aber wie soll ich die Bedingung in einen Query packen? Dafür muss ich wohl ein ernstes Wörtchen mit ORDER BY sprechen, oder nicht?
            du kannst dir deine Bedingungen klemmen weil

            1. Du bekommst alle Datensätze die kleiner sind
            2. ... alle die größer sind...
            3. ... alle die gleich sind

            De Facto enthalten deine beiden Arrays insgesamt alle Datensätze sofern $month und $day in beiden Bedingungen gleich sind.

            Was ist eigentlich genau dein Ziel? Dann kann man dir ggf. besser helfen. Geht es nur um die Sortierung? Ist ja kein größeres Problem weil du mittels ASC, DESC (auf- bzw. absteigend) sortieren kannst.

            Wenn du dann alle Datensätze durchläufst ist irgendwann der Punkt erreicht an dem $month.$day überschritten wird, sobald das einmal geschehen ist weisst du also das nur noch "ältere" Geburtstage kommen oder eben neuere, falls aufsteigend sortiert wurde.
            "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

            Kommentar


            • #7
              Was ich genau möchte, ist eine Auflistung der Geburtstage. Ganz oben steht der nächste bzw. heutige, bis zum Ende des Jahres. Darunter die Geburtstage vom Anfang des Jahres (bis Gestern). Das Ganze ist momentan in 2 identische While-Schleifen gepackt (inklusive Gruppenbruch mit Monatsüberschrift).

              Kommentar


              • #8
                Ganz oben steht der nächste bzw. heutige, bis zum Ende des Jahres. Darunter die Geburtstage vom Anfang des Jahres (bis Gestern).
                Da würde ich sagen, daß die zwei Abfragen gar nicht sooo verkehrt sind.

                Alternativ könntest Du alle DS einlesen und daraus zwei oder ein mehrdimensionales Array machen und ausgeben.
                Ich denke aber, daß die zwei Abfragen in dem Fall besser wären.

                Es sei denn, jemand hat ne Idee, wie man das tatsächlich in eine Abfrage reinbekommt?
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #9
                  Zitat von Arne Drews Beitrag anzeigen
                  Da würde ich sagen, daß die zwei Abfragen gar nicht sooo verkehrt sind.

                  Alternativ könntest Du alle DS einlesen und daraus zwei oder ein mehrdimensionales Array machen und ausgeben.
                  Ich denke aber, daß die zwei Abfragen in dem Fall besser wären.

                  Es sei denn, jemand hat ne Idee, wie man das tatsächlich in eine Abfrage reinbekommt?
                  An sich sind 2 Abfrage durchaus eine Möglichkeit.

                  Aber:

                  PHP-Code:
                  $sql mysql_query('SELECT * FROM `benutzer` ORDER BY (`geburtstag` >= "'.$month.$day.'"), `geburtstag`, `nachname`'); 
                  Sollte ebenfalls funktionieren. Dann stehen alle zukünftigen am Anfang des Arrays.
                  "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                  Kommentar


                  • #10
                    Zitat von Dark Guardian Beitrag anzeigen
                    PHP-Code:
                    $sql mysql_query('SELECT * FROM `benutzer` ORDER BY (`geburtstag` >= "'.$month.$day.'"), `geburtstag`, `nachname`'); 
                    Sollte ebenfalls funktionieren. Dann stehen alle zukünftigen am Anfang des Arrays.
                    $sql funktioniert ja auch. So sieht mein erster Query ja auch schon die ganze Zeit aus. Dadurch bekomme ich aber nur die DS bis einschließlich 1231. Dafür habe ich ja den zweiten Query; Um die DS vom 0101 bis gestern zu bekommen.

                    Also ist meine bisherige Umsetzung garnicht verkehrt oder?

                    Allerdings stehe ich dann vor dem Problem, das ich noch garnicht erwähnt habe: Ich möchte nämlich ungefähr die eine Hälfte aller DS auf der linken, die andere Hälfte auf der Rechten Seite stehen haben (mit table oder float, ist ja erstmal egal).

                    Das muss ich ja mit einem zweiten Gruppenbruch arbeiten und den aktuellen Monat ermitteln, plus 6 (Monate) rechnen und wenn der resultierende Monat jedes Schleifen-Durchgangs erreicht ist, ein einmaliges "</td><td>" bzw. "</div><div style='float:left;'>" einschieben. Habe da schon stundenlang rumgebastelt, aber entweder bekomme ich das dann vor/nach jedem Datensatz, der unter dem gesuchten Monat steht, angezeigt oder garnicht. Sprich: Bisher kein Erfolg.

                    Hat jemand eine Idee, wie ich das machen kann?

                    Kommentar


                    • #11
                      Zitat von Paeisi Beitrag anzeigen
                      $sql funktioniert ja auch. So sieht mein erster Query ja auch schon die ganze Zeit aus.
                      Mein Query ist anders. Du hast die Bedingung im WHERE Teil, ich habe sie im ORDER BY Teil.

                      Der Unterschied ist das mein Query somit alle Datensätze ausgibt, alle Geburtstage die in der Zukunft liegen aber an den Anfang stellt und danach nach "geburtstag" sortiert.

                      Deinen Gruppenbruch kannst du doch nach der Hälfte der Datensätze machen. Du hast ja ein Array mit einer bestimmten Anzahl Elementen. Sobald du also das erste Element ausgeben willst dessen Index == count(Elemente) / 2 ist steht der links/rechts Gruppenbruch an.

                      In dem Fall sind 2 Querys aber sinnvoller weil du sonst noch die Anzahl der zukünftigen Geburtstage ermitteln musst. um im ersten Abschnitt deinen Links/rechts Gruppenbruch hinzukriegen (weil count(alle DS) ist etwas anderes als count(zukünftige Geb.) )
                      "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                      Kommentar

                      Lädt...
                      X