Ankündigung

Einklappen
Keine Ankündigung bisher.

Zwei Select Distinct - Abfragen nacheinander - Ergebnis zwischenspeichen möglich?

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zwei Select Distinct - Abfragen nacheinander - Ergebnis zwischenspeichen möglich?

    Hallo, ich habe zwei Abfragen aus zwei unterschiedlichen Tabellen nacheinander:


    $pdo = new PDO('mysql:host=localhost;dbname=XYZ);
    $sql = "SELECT DISTINCT * FROM `belAD` ORDER BY RAND() LIMIT 0, 1 ";
    foreach ($pdo->query($sql) as $row) {
    echo $row['adj'];}

    // danach folgt die zweite Abfrage: //

    $pdo = new PDO('mysql:host=localhost;dbname=XYZ);
    $sql = "SELECT DISTINCT * FROM `belNO` ORDER BY RAND() LIMIT 0, 1 ";
    fo
    reach ($pdo->query($sql) as $row) {
    echo $row['stn'];}

    // nun ist es so, das ich an dieser Stelle aus der vorherigen Abfrage (Tabelle 'belAD') die zugehörige ID anzeigen lassen möchte, was allerdings nicht funktioniert //

    echo $row['IDbela'];

    // es wird gar nichts angezeigt, ich vermute, die erste Abfrage müsse man zwischenspeichern. Allerdings habe ich nicht die geringste Ahnung, wie das funktioniert. Vielleicht kann mir bitte jemand mit dem Code aushelfen? Wäre sehr lieb, ich stehe ziemlich auf dem Schlauch. Danke schön. //


    echo $row['IDstn'];}











  • #2
    Bitte niemals SELECT * verwenden, sondern im SELECT immer die Spalten angeben, die du erwartest.

    Bei Datenbankproblemen bitte auch die Tabellenstrukturen und Testdaten als SQL-Code posten.

    Was man jedenfalls schon sagen kann ist, dass du deine Spalten zu kryptisch benannt hast. Spaltennamen sollten aussagekräftig und nicht unnötig abgekützt sein. Was heißt "bela"? Was ist "stn"? Wenn man solche Fragen stellen muss, ist beim Tabellendesign schon was schief gelaufen.

    Kommentar


    • #3
      ich bin kein Informatiker - und für meine Zwecke ist dieser Minimalismus angebracht und zweckmäßig - daher ich kann auf solche überflüssigen Kommentare dankend verzichten. Ist jemand anders vielleicht so liebenswert meine Frage zu beantworten, würde sehr helfen. Danke schön.

      Kommentar


      • #4
        Zitat von Hutchison Beitrag anzeigen
        Hallo, ich habe zwei Abfragen aus zwei unterschiedlichen Tabellen nacheinander:


        $pdo = new PDO('mysql:host=localhost;dbname=XYZ);
        $sql = "SELECT DISTINCT * FROM `belAD` ORDER BY RAND() LIMIT 0, 1 ";
        foreach ($pdo->query($sql) as $row) {
        echo $row['adj'];}

        // danach folgt die zweite Abfrage: //

        $pdo = new PDO('mysql:host=localhost;dbname=XYZ);
        $sql = "SELECT DISTINCT * FROM `belNO` ORDER BY RAND() LIMIT 0, 1 ";
        fo
        reach ($pdo->query($sql) as $row) {
        echo $row['stn'];}

        // nun ist es so, das ich an dieser Stelle aus der vorherigen Abfrage (Tabelle 'belAD') die zugehörige ID anzeigen lassen möchte, was allerdings nicht funktioniert //

        echo $row['IDbela'];

        // es wird gar nichts angezeigt, ich vermute, die erste Abfrage müsse man zwischenspeichern. Allerdings habe ich nicht die geringste Ahnung, wie das funktioniert. Vielleicht kann mir bitte jemand mit dem Code aushelfen? Wäre sehr lieb, ich stehe ziemlich auf dem Schlauch. Danke schön. //


        echo $row['IDstn'];}
        Das ganze steckt voller Widersprüche und absolut unverständlichen Clauses. "Limit 0, 1 liefert einen einzigen Datensatz, ist das wirklich das, was du willst. Den brauchst du dann auch nicht mehr sortieren. Warum sortierst du nach einer Zufallszahl, macht auch keinen Sinn. Wo hast du das abgepinnt??

        Den Select distinct mit * setzt man normalerweise ein, um Doubletten auszublenden. War das deine Absicht?

        Um was geht es überhaupt, fachlich, nicht dv-technisch? Da Abkürzungen wie "belAD", "IDbela" usw. vorkommen, vermute ich eine kaufmännische/buchhalterische Anwendung. Was ist also der Sinn. Welcher Vorgang/Geschäftsfall soll abgebildet werden?

        Hast du die Select-Statements mal isoliert ausprobiert? Was ist da bei rausgekommen?

        Bitte einen DB-Dump mit Testdaten - so viel wie nötig, so wenig wie möglich, anonymisiert - hier einstellen. Bitte die gesamte Datenbank, nicht nur die beiden Tabellen!!!

        Kommentar


        • #5
          Zitat von Hutchison Beitrag anzeigen
          ich bin kein Informatiker - und für meine Zwecke ist dieser Minimalismus angebracht und zweckmäßig - daher ich kann auf solche überflüssigen Kommentare dankend verzichten. Ist jemand anders vielleicht so liebenswert meine Frage zu beantworten, würde sehr helfen. Danke schön.
          Ich denke, der Kommentar von Hellbringer war in jeder Hinsicht ok. Wenn du so reagierst, wird hier wohl kaum jemand Lust haben, dir zu helfen.

          Kommentar


          • #6
            wie gesagt - ich bin nicht vom fach - es ist eine einfache Spiellerei. Ja, ein einziger Datensatz soll auch jeweils ausgespuckt werden. Wenn der Code falsch oder umständlich ist - ich habe ihn mir den Snippet von einer Tutorial-Website stibitzt und für meine Zwecke angepasst - und soweit hat es funktioniert.

            Nur wäre es hilfreich, wenn die ID aus der ersten Tabelle des jeweiligen Datensatzes am Ende mit ausgegeben wird.

            Tabellen sind wie folgt aufgaut: belAD:

            spaltennamen: idbela, adj


            belNO:
            Spaltennamen:

            idNO, stn

            ausgebenen werden soll es so:

            adj, stn,

            und am ende idbela idNO


            falls das überhaupt so möglich ist? ich habe nicht die geringste Ahnung?

            Kommentar


            • #7
              Zitat von Hutchison Beitrag anzeigen
              wie gesagt - ich bin nicht vom fach - es ist eine einfache Spiellerei. Ja, ein einziger Datensatz soll auch jeweils ausgespuckt werden. Wenn der Code falsch oder umständlich ist - ich habe ihn mir den Snippet von einer Tutorial-Website stibitzt und für meine Zwecke angepasst - und soweit hat es funktioniert.

              Nur wäre es hilfreich, wenn die ID aus der ersten Tabelle des jeweiligen Datensatzes am Ende mit ausgegeben wird.

              Tabellen sind wie folgt aufgaut: belAD:

              spaltennamen: idbela, adj


              belNO:
              Spaltennamen:

              idNO, stn

              ausgebenen werden soll es so:

              adj, stn,

              und am ende idbela idNO


              falls das überhaupt so möglich ist? ich habe nicht die geringste Ahnung?
              Nochmal: Was ist Sinn und Zweck? Und: Zumindest ich werde dir nicht helfen, wenn du keinen DB-Dump mit Testdaten einstellst. Und dann bitte das erwartete Ergebnis auf Grundlage dieser Daten.

              Kommentar


              • #8
                ID-BELA BELA
                1 fing
                2 lier
                3 vuga
                ID-NO NO
                1 biga
                2 hale
                3 zuga
                Als Ergebnis hätte ich gerne - und zwar ZUFÄLLIG und JEWEILS GENAU einen Datensatz, hier beispielhaft (3 aus Tabelle BELA, und 1 aus Tabelle NO, also so:

                vuga Biga (3,1)

                ich hoffe das ist einigermaßen verständlich. Aus Datenschutzrechtlichen Gründen darf ich über den konkreten Sinn und Zweck nicht sprechen. Eine geschäftliche Spielerei. Bitte um Verständnis.



                Kommentar


                • #9
                  Zitat von Hutchison Beitrag anzeigen
                  ... Als Ergebnis hätte ich gerne...

                  ich hoffe das ist einigermaßen verständlich. Aus Datenschutzrechtlichen Gründen darf ich über den konkreten Sinn und Zweck nicht sprechen. Eine geschäftliche Spielerei. Bitte um Verständnis.
                  Nein, kein Verständnis.
                  Das kann man als Cross-Join mit den beiden Abfragen als Unter-Abfragen machen. Aber ich bin damit raus. "aus datenschutzrechtlichen Gründen", was soll das? Wir bilden mit unseren Entwicklungen Realität ab. Wie soll man dir helfen, wenn du uns diese Realität verschweigst. Für mich ist das entweder ein Ausrede, weil du die Sinnlosigkeit deiner "Spielerei" erkannt hast oder Wichtigtuerei. Wenn du es tatsächlich "geheimhalten" mußt, beauftrage einen Entwickler und bezahl dafür.

                  Kommentar


                  • #10
                    Sie tun mir Leid, Sie armseliger, vermutlich arbeitsloser wie geschiedener, trauriger Pflaumenaugust. Ja, ich bezahle lieber jemanden dafür, als mich mit derart schulmeisterlichen Jammergestalten herumzuärgern.

                    Kommentar


                    • #11
                      Nur mal so als Hinweis, du bist nicht verpflichtet in der 2. Abfrage die Variable $row zu benutzen und damit $row aus der ersten Abfrage zu überschreiben.

                      Kommentar


                      • #12
                        Danke schön. Jetzt habe ich meinen Fehler verstanden! Hilfreichster Kommentar.

                        Kommentar


                        • #13
                          Zitat von Hutchison Beitrag anzeigen
                          Danke schön. Jetzt habe ich meinen Fehler verstanden! Hilfreichster Kommentar.
                          Gerne, mit #10 hast du vermutlich recht....

                          Kommentar


                          • #14
                            Ich denke hier ist soweit alles mal klar, daher

                            MOD: Geschlossen
                            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                            PHP.de Wissenssammlung | Kein Support per PN

                            Kommentar

                            Lädt...
                            X