user daten per join abfragen und gleichzeitig black/whitelist abfragen?

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

  • user daten per join abfragen und gleichzeitig black/whitelist abfragen?

    Hallo,

    derzeit frage ich User wir folgt ab:

    SELECT user.id, profil.name
    FROM user
    LEFT JOIN profil
    ON user.id = profil.userID
    WHERE
    (user.privat = '2' && user.plzAusschluss != '".substr($_SESSION['plz'],0,1)."')
    LIMIT 0,1

    Jetzt möchte ich in diese Abfrage noch meine white- bzw. blacklist
    einbinden, OHNE zuvor eine weitere Abfrage zu starten, geht das?

    Whitelist:
    userID, ownerID

    userID = der user, der den user mit id = ownerID dennoch 'selecten' darf, obwohl er dies aufgrund
    (user.privat = '2' && user.plzAusschluss != '".substr($_SESSION['plz'],0,1)."')
    nicht könnte.

    blacklist:
    userID, ownerID

    userID = der user, der den user mit id = ownerID nicht 'selecten' darf, obwohl er dies normallerweise könnte =>
    (user.privat = '2' && user.plzAusschluss != '".substr($_SESSION['plz'],0,1)."')

    Ich hoffe, ich habe mich einigermassen versändlich ausgedrückt?!

  • #2
    anders gefragt...

    anders gefragt...

    wenn die blacklist Tabelle so ausschaut:

    userID, ownerID
    2 1
    1 2
    3 2
    ...

    und die user Tabelle so:

    id, name
    1 lars
    2 michael
    3 julia
    4 anne
    ...

    wie kann ich mit einer mit einer Query für user #1(Lars) alle Datensätze raussuche, die Lars nicht in Ihrer Blacklist haben?

    Also in dem Beispiel alle user ausser #2 (michael), da er ja user #1 in seiner blacklist hat.

    Kommentar


    • #3
      left join und mit is null den ownerId prüfen sollte dir helfen

      Kommentar


      • #4
        SELECT user.id, user.email
        FROM user
        LEFT JOIN blacklist ON blacklist.userID = user.id
        WHERE blacklist.userID IS NULL

        oder

        SELECT user.id, user.email
        FROM user
        LEFT JOIN blacklist ON blacklist.ownerID = user.id
        WHERE blacklist.userID IS NULL

        kapier das grad nich so...
        Im ersten Fall kanns ja sein, dass ein anderer User ihn auf seine Blacklist gesetzt hat, und im zweiten Fall, dass dann einfach eine
        andere userID gefunden wird ... ?!?

        Kommentar


        • #5
          hm ... probier mal so: (ungetestet)
          PHP-Code:
          select c.idc.email  from 
             user a left join blacklist b on a
          .id=b.userid and a.id=
                right join user c on b
          .ownerid=c.id 
                   where b
          .ownerid is null and c.id<>
          man kann wahrscheinlich noch optimieren, aber ich bin jetzt zu faul zu testen
          Zuletzt geändert von asp2php; 06.12.2005, 00:08.

          Kommentar


          • #6
            ich versteh das mit a.lid bzw. c.lid nicht, was bedeutet das?

            Kommentar


            • #7
              vertipper von mir, ich verwende immer lid (l für long) , daher ...

              Kommentar


              • #8
                ah ok, dank Dir...

                Kommentar


                • #9
                  So hab ich's jetzt:
                  PHP-Code:
                  $userQuery "SELECT u.id
                          FROM user u left join blacklist b on u.id = b.userID and u.id=1
                                    right join user u2 on b.ownerID = u2.id
                                       where b.ownerID is null and u2.id <> 1"
                  ;

                  $userRes mysql_query($userQuery) or die($userQuery.'<br><br>'.mysql_error());

                  while(
                  $userRow mysql_fetch_array($userRes))
                  {
                      echo 
                  $userRow['id'].', '.$userRow['email'].'<br>';

                  Tabellen:
                  PHP-Code:
                  CREATE TABLE `blacklist` (
                    `
                  userIDint(11NOT NULL default '0',
                    `
                  ownerIDint(11NOT NULL default '0'
                  ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

                  CREATE TABLE `user` (
                    `
                  idmediumint(8NOT NULL auto_increment,
                    `
                  namevarchar(30collate latin1_general_ci NOT NULL default '',
                    
                  PRIMARY KEY  (`id`)
                  ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

                  INSERT INTO `userVALUES (1'lars');
                  INSERT INTO `userVALUES (2'michael');
                  INSERT INTO `userVALUES (3'julia');
                  INSERT INTO `userVALUES (4'anne'); 
                  und das kommt raus:

                  PHP-Code:
                  1,
                  1,
                  1,
                  2,
                  2,
                  2,
                  3,
                  3,
                  3,
                  4,
                  4,
                  4
                  Mit
                  PHP-Code:
                  INSERT INTO blacklist VALUES (12); 
                  kommt das raus:
                  PHP-Code:
                  1,
                  1,
                  2,
                  2,
                  2,
                  3,
                  3,
                  3,
                  4,
                  4,
                  4
                  Zuletzt geändert von westberlin; 06.12.2005, 15:04.

                  Kommentar


                  • #10
                    So funktioniert es jetzt soweit ich's testen konnte:

                    SELECT u.id, u.name
                    FROM user u left join blacklist b on u.id = b.ownerID AND b.userID=1
                    WHERE b.userID is null
                    AND u.id != 1

                    Ist an der Query was auszusetzen bzw. kann man da was optimieren? Oder ist sonst irgendnen Denkfehler drin?
                    Freu über mich über Feedback...

                    Kommentar


                    • #11
                      kann sich dem nochmal jmd annehmen?
                      Weiß überhaupt nicht, ob das gut gelöst ist so...

                      Kommentar

                      Lädt...
                      X