[gelöst] mysql SELECT MINUS oder !=

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [gelöst] mysql SELECT MINUS oder !=

    hi leute

    ich hab eine halbwegs komplexere abfrage und kriege es einfach nciht gebacken. ich habs mit MINUS und anderen versucht vllt könnt ihr mir helfen.

    der code:


    PHP Code:
       $query "SELECT a.nick, b.text, b.wann, b.userid, b.url, b.newsid
        FROM loungeuser as a, 
             loungenews as b "
    ;
       
         
    //  news_block as c , 
       
    $query .= "WHERE 
       (b.userid IN
    (SELECT DISTINCT friend FROM loungefriends WHERE refid = '
    $logged') 
          OR b.userid IN
    (SELECT userid FROM watchlist WHERE watcherid = '
    $logged')
          )  and b.userid = a.userid 
       AND b.wann > '
    $tage'";
       
    //   $query .= "and b.userid != 
    //   (SELECT block FROM news_block 
    //   WHERE userid = '$logged')";
        
       
    $query .= "ORDER BY b.wann DESC LIMIT 0, 5"
    die abfrage geht soweit. es geht mir um den als kommentarausgeblendeten teil. es soll überprüft werden ob es einen datensatz in "news_block" gibt und wenn ja diesen ausschliessen... fragen dazu? oder ist erkennbar was ich meine....?
    der query != (SELECT....) geht so leider nicht....

  • #2
    Hallo,

    meinst du vielleicht "and b.userid not in (select ...)"? Da du viele Unterabfragen verwendest und das vielleicht mal zu langsam werden könnte, empfehle ich dir, dich demnächst mal mit Joins zu beschäftigen.

    Für die bessere Übersicht: könntest du bitte kurz die Tabellen vorstellen, die benötigt werden und wie diese untereinander in Beziehung stehen? Du brauchst nicht alle Spalten aufzählen, nur die wichtigsten, vor allem aber alle Primär- und Fremdschlüsselspalten.

    Beispiel:

    Code:
    [SIZE="2"]person
    ------
    id
    name
    ...
    
    
    telefon_typ
    -----------
    id
    name
    ...
    
    
    telefon
    -------
    id
    person_fkey => person.id
    typ_fkey    => telefon_typ.id
    nummer
    ...[/SIZE]
    Gruß,

    Amica
    Last edited by AmicaNoctis; 04-11-2009, 09:54.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Comment


    • #3
      OMG ... !!! ewig hab ich danach gesucht aber NOT IN nirgends gefunden ....

      NOT IN war in diesm fall die lösung danke.
      anders weiß ich mir momentan noch nicht zu helfen. das ist meine komplexeste abfrage bisher ^^

      wie könnte denn das gleiche mit join aussehen?
      Last edited by keks333; 04-11-2009, 10:09.

      Comment


      • #4
        Hast du die Variablen $logged und $tage schon hinsichtlich SQL Injections behandelt? Wenn nicht, ist das unbedingt erforderlich!
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Comment


        • #5
          Ich habe anscheinend nicht kapiert worum es geht, kann mir jedenfalls den Join mit loungeuser AS a nicht erklären.

          Comment


          • #6
            Originally posted by keks333 View Post
            wie könnte denn das gleiche mit join aussehen?
            Das lässt sich aus dem Stegreif nicht sagen. Dazu müsste man dein DB-Modell kennen und verstehen. Außerdem sollte das nur ein gutgemeinter Hinweis sein, dass du dich mal mit Joins beschäftigen solltest
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Comment


            • #7
              Originally posted by onemorenerd View Post
              Ich habe anscheinend nicht kapiert worum es geht, kann mir jedenfalls den Join mit loungeuser AS a nicht erklären.
              loungeuser as a (select a.nick)

              gibt mir den aktuellen benutzernamen des news posters

              Hast du die Variablen $logged und $tage schon hinsichtlich SQL Injections behandelt? Wenn nicht, ist das unbedingt erforderlich!
              hmm was meinst du?

              Comment


              • #8
                Originally posted by keks333 View Post
                hmm was meinst du?
                Das ist genau die falsche Antwort. Richtig lauten müsste es: "Nein, noch nicht, aber ich hab mich inzwischen über Google/Wikipedia/... über SQL Injections schlau gemacht und behebe das sofort."
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Comment


                • #9
                  Originally posted by keks333 View Post
                  gibt mir den aktuellen benutzernamen des news posters
                  Wegen a.userid = b.userid gibt es dir immer b.nick und deshalb brauchst du a gar nicht.

                  Comment


                  • #10
                    Originally posted by onemorenerd View Post
                    Wegen a.userid = b.userid gibt es dir immer b.nick und deshalb brauchst du a gar nicht.
                    ... und wenn es in loungenews (alias b) gar keine nick-Spalte gibt?
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Comment


                    • #11
                      Originally posted by AmicaNoctis View Post
                      Das ist genau die falsche Antwort. Richtig lauten müsste es: "Nein, noch nicht, aber ich hab mich inzwischen über Google/Wikipedia/... über SQL Injections schlau gemacht und behebe das sofort."
                      ja du hast recht aber ich hocke schons seit stunden an den scheiss scripts da nervts irgendwann :-P

                      Wegen a.userid = b.userid gibt es dir immer b.nick und deshalb brauchst du a gar nicht.
                      danke ich probiers mal

                      Comment


                      • #12
                        Originally posted by keks333 View Post
                        ich hocke schons seit stunden an den scheiss scripts da nervts irgendwann
                        Das glaub ich dir ja, aber wenn die Seite online ist und ein böser Mensch kommt vorbei und spielt ein bisschen rum und hat dann alle deine Kundendaten kopiert und deine Datenbank geleert, dann nervt das erst richtig.
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Comment


                        • #13
                          Originally posted by AmicaNoctis View Post
                          ... und wenn es in loungenews (alias b) gar keine nick-Spalte gibt?
                          Ach shit, ich hab mich verlesen. loungenews != loungeuser

                          Comment


                          • #14
                            Originally posted by onemorenerd View Post
                            Wegen a.userid = b.userid gibt es dir immer b.nick und deshalb brauchst du a gar nicht.
                            aber bei a.userid = b.userid kommt ja auch die tabelle b vor... kann ich also doch nciht weglassen...

                            Comment


                            • #15
                              Jaja schon richtig. Kannst du nicht weglassen. Ich hatte mich verlesen. Ignorier mich!

                              Comment

                              Working...
                              X