LEFT JOIN und LIMIT

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

  • LEFT JOIN und LIMIT

    Hallo Leute,

    Ich habe zwei Tabellen user und user_vars.

    CREATE TABLE `user` (
    `id` int(14) NOT NULL auto_increment,
    `user` varchar(255) NOT NULL,
    `firstname` varchar(100) NOT NULL,
    `lastname` varchar(100) NOT NULL,
    );

    CREATE TABLE `user_vars` (
    `user_id` int(14) NOT NULL,
    `varname` varchar(100) NOT NULL,
    `text` text NOT NULL,
    )


    Ich möchte ein limit von zwei usern aus user.

    aus der user_vars möchte ich drei zu den usern gehörige attribute rausfischen (country, zodiac, gender). das sind aber keine felder, sondern varname = 'country', text = 'germany' usw.

    Es besteht die möglichkeit, das user1 keinen eintrag zu country hat, der andere keinen zu zodiac oder beides usw.

    jetzt hatte ich die idee ein limit auf zwei mal drei zu setzen.

    also zwei user will ich haben mal drei attributen = 6

    meine abfrage:


    SELECT user.id, user, firstname, lastname, (
    IF( varname = 'country', text, '' )
    ) AS country, (
    IF( varname = 'gender', text, '' )
    ) AS gender, (
    IF( varname = 'zodiac', text, '' )
    ) AS zodiac
    FROM user
    LEFT JOIN user_vars ON user_id = user.id
    LIMIT 6

    problem. wenn einem user der eintrag für country fehlt bekomme ich drei user zurück, weil der left join kein limit kennt.

    ich hoffe meine frage einigermaßen verständlich ausgedrückt zu haben.

    hat jemand einen tip?

  • #2
    ich habs nicht ganz verstanden, aber Du könntest Deine tabelle 3 mal joinen, ist zwar komischim Design, könnte aber Dein Problem lösen
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      werd ich mal versuchen

      Kommentar


      • #4
        da bekomme ich als fehler
        #1066 - Not unique table/alias: 'user_vars'

        Kommentar


        • #5
          ja dann musst Du deinen tabellen aliase geben
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            so gehts


            SELECT user.id, user, firstname, lastname, (
            IF( ta.varname = 'country', ta.text, '' )
            ) AS country, (
            IF( tb.varname = 'gender', tb.text, '' )
            ) AS gender, (
            IF( tc.varname = 'zodiac', tc.text, '' )
            ) AS zodiac
            FROM user
            LEFT JOIN user_vars AS ta ON ta.user_id = user.id AND ta.varname = 'country'
            LEFT JOIN user_vars AS tb ON tb.user_id = user.id AND tb.varname = 'gender'
            LEFT JOIN user_vars AS tc ON tc.user_id = user.id AND tc.varname = 'zodiac'
            LIMIT 3

            ist irgendwie komisch, aber auch nicht übel

            danke dir.

            vielleicht gibt es aber noch einen anderen weg?

            Kommentar


            • #7
              evt kannst Du die ganzen IF weg lassen, da der left join sowieso null zurück gibt.
              Beantworte nie Threads mit mehr als 15 followups...
              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

              Kommentar


              • #8
                nein ich möchte die varname-values von der user_vars als row->namen ausgegeben bekommen

                Kommentar


                • #9
                  nein ich möchte die varname-values von der user_vars als row->namen ausgegeben bekommen.

                  also in der tabelle user_vars steht

                  varname='country' IST text='germany'
                  ich möchte im datensatz aber country = 'germany' zurückhaben

                  ear aber ne coole idee mit den drein left joins
                  Zuletzt geändert von callt; 09.09.2008, 14:57.

                  Kommentar


                  • #10
                    ach mensch ich kann die ifs ja doch weglassen


                    SELECT user.id, user, firstname, lastname,
                    ta.text AS country,
                    tb.text AS gender,
                    tc.text AS zodiac
                    FROM user
                    LEFT JOIN user_vars AS ta ON ta.user_id = user.id AND ta.varname = 'country'
                    LEFT JOIN user_vars AS tb ON tb.user_id = user.id AND tb.varname = 'gender'
                    LEFT JOIN user_vars AS tc ON tc.user_id = user.id AND tc.varname = 'zodiac'
                    LIMIT 3
                    Zuletzt geändert von callt; 09.09.2008, 15:20.

                    Kommentar


                    • #11
                      sag ich doch :-P
                      Beantworte nie Threads mit mehr als 15 followups...
                      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                      Kommentar

                      Lädt...
                      X