Ankündigung

Einklappen
Keine Ankündigung bisher.

noob frage zur abfrage... aber finde nix.

Einklappen

Neue Werbung 2019

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

  • noob frage zur abfrage... aber finde nix.

    ich bin seit stunden verzweifelt am probieren wie ich aus 2 verschiedenen tabellen alle emailadressen abfragen kann, ausser sie sind doppelt. sprich es sollen alle emailadressen ausgeben werden, falls eine in beiden tabellen gespeichert ist soll sie nur einmal ausgegeben werden.

    ich hab das bisher so probiert, jedoch funktioniert das nicht so richtig.
    Code:
    $sql = 'SELECT t1.email, t2.email 
               FROM tabelle1 AS t1, tabelle2 AS t2 
               WHERE t1.email (IS NOT t2.email)';
    ich finde leider auch im manual nichts genaues darüber. nur wie man die select abfragen optimieren kann ( http://dev.mysql.com/doc/refman/4.0/de/select.html ).

    wäre super wenn mir da jemand helfen könnte.
    mfg Alex

  • #2
    DISTINCT dürfte helfen.

    Kommentar


    • #3
      Was du suchst, dürfte wohl eher UNION sein.

      Kommentar


      • #4
        ich hab mir das ganze jetzt mal angeschaut und ich komme einfach nicht weiter. mal zum veranschaulichen: ich habe 2 tabellen:
        tabelle 1:
        - id
        - email

        tabelle 2:
        - id
        - email

        daten tabelle 1:
        - id: 1
        - email:

        - id: 2
        - email: anna@provider.de

        - id: 3
        - email: peter@provider.de

        daten tabelle 2:
        - id: 1
        - email: anna@provider.de

        - id: 2
        - email:

        - id: 3
        - email: peter@provider.de

        - id: 4
        - email: gustav@provider.de
        jetzt sollte nach sql abfrage und nachfolgender while schleife folgendes ausgegeben werden:
        anna@provider.de; peter@provider.de; gustav@provider.de

        die leeren sollen nicht ausgegeben werden, die doppelten nur einmal.

        mit folgender mysql abfrage kommen aber nie diese ergebnisse heraus. was habe ich denn da bloss falsch?

        Code:
        $sql = 'SELECT DISTINCT t1.email, t2.email 
                FROM tabelle1 AS t1, 
                     tabelle2 AS t2';
        2. problem: wie mache ich die abfrage dass nur die datensätze ausgegeben werden die eine emailadresse enthalten? mit IS NOT NULL geht das nicht da die felder nicht standardmässig NULL sind.
        kann das natürlich dann mit php !empty($data['email']) machen, aber das ist sicher resourcen fressend oder?
        mfg Alex

        Kommentar


        • #5
          Wie oben weiter schon geschrieben musst du dafür UNION benutzen.

          Kommentar


          • #6
            leider habe ich hierzu nur folgendes gefunden: http://dev.mysql.com/doc/refman/4.0/de/union.html

            ich muss also eine select für alle datensätze der tabelle 1 machen, dann eine select für die datensätze der tabelle 2 und wie verbinde ich die dann? kann mir darunter überhaupt nix vorstellen. in der oben genannten deutschen mysql erklärung ist das ganz schlecht beschrieben.
            mfg Alex

            Kommentar


            • #7
              Code:
              $sql="SELECT * FROM tab1".
                   "UNION".
                   "SELECT * FROM tab2";
              http://www.rentmyphone.com

              Kommentar


              • #8
                danke. also so funktioniert das mit dem union. und wie kann ich jetzt doppelte einträge auslassen, bzw. einmal ausgeben? hab da im englischen was gelesen von ALL. oder könnte ich DISTINCT anwenden? aber wie, denn distinct schaut ja nur ob es 2x in 1 tabelle vorkommt oder?
                mfg Alex

                Kommentar


                • #9
                  Zitat von Promaetheus
                  und wie kann ich jetzt doppelte eintr�ge auslassen, bzw. einmal ausgeben?
                  Solange du nicht das Schl�sselwort ALL verwendest, werden keine doppelten Zeilen ermittelt.

                  Zitat von Promaetheus
                  hab da im englischen was gelesen von ALL.
                  ALL bewirkt genau das Gegenteil von dem, was du willst.

                  [quote="Promaetheus"]oder k�nnte ich DISTINCT anwenden?[/url]
                  DISTINCT kannst du angeben. Diese Angabe ist allerdings nicht Pflicht. So lange das Schl�sselwort ALL nicht auftaucht, wird die Abfrage immer wie DISTINCT behandelt.

                  Zitat von Promaetheus
                  denn distinct schaut ja nur ob es 2x in 1 tabelle vorkommt oder?
                  Nein, DISTINCT bezieht sich auf alle Tabellen, die in der Abfrage verwendet werden.

                  Kommentar


                  • #10
                    ich hab das ganze jetzt mal angewandt. jedoch in abgewandelter form. leider klappt das bei mir absolut nicht. ich hab das alles jetzt auf eine einfachere sache übertragen aber auch da funktioniert das bei mir nicht.

                    ich hab 2 tabellen. eine mit den hauptdaten eines modelles. eine spalte davon ist das hauptbild. dann eine 2. tabelle mit zusatzbildern.

                    jetzt wollte ich angeben wieviele bilder bei einem modell gespeichert sind. wenn in tabelle 1 das bild angegeben ist, sprich not empty, dann wird das dazugezählt.

                    hier die kombinierte abfrage:
                    Code:
                    $sql = 'SELECT COUNT(mod_id) AS pic_count 
                            FROM '.TABLE_MODELS.' 
                            WHERE (mod_pic IS NOT NULL) AND mod_id = '.$data['mod_id'].'
                            UNION ALL 
                            SELECT COUNT(add_pic_mod_id) AS pic_count 
                            FROM '.TABLE_ADDITIONAL_MOD_PICS.'
                            WHERE add_pic_mod_id = '.$data['mod_id'];
                    $query = pd_mysql_query($sql);
                    $add_pic_data = mysql_fetch_array($query);
                    leider kommt da nur müll raus bei mir. die kombinierten abfragen check ich überhaupt nicht.
                    was mach ich da nur falsch? so wird immer nur das ergebnis der 1. tabelle ausgegeben. *argl*
                    mfg Alex

                    Kommentar


                    • #11
                      Deine Abfrage liefert dir zwei Ergebnisreihen. Du musst also mysql_fetch_*() zweimal aufrufen, um beide Ergebnismengen zu erhalten. Dafür eignet sich eine while-Schleife.

                      Kommentar


                      • #12
                        danke. so funktioniert es jetzt endlich:
                        Code:
                        $sql = 'SELECT COUNT(mod_id) AS pic_count
                                FROM '.TABLE_MODELS.'
                                WHERE (mod_pic IS NOT NULL) AND mod_id = '.$data['mod_id'].'
                                UNION ALL
                                SELECT COUNT(add_pic_mod_id) AS pic_count
                                FROM '.TABLE_ADDITIONAL_MOD_PICS.'
                                WHERE add_pic_mod_id = '.$data['mod_id'];
                        $query = pd_mysql_query($sql);
                        $pics = 0;
                        while($add_pic_data = mysql_fetch_array($query)) {
                          $pics = $pics + $add_pic_data['pic_count'];
                        };
                        danke nochmals!!!
                        mfg Alex

                        Kommentar

                        Lädt...
                        X