[gelöst] mysql SELECT MINUS oder !=

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

  • [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
    Zuletzt geändert von AmicaNoctis; 04.11.2009, 10: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]

    Kommentar


    • #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?
      Zuletzt geändert von keks333; 04.11.2009, 11:09.

      Kommentar


      • #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]

        Kommentar


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

          Kommentar


          • #6
            Zitat von keks333 Beitrag anzeigen
            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]

            Kommentar


            • #7
              Zitat von onemorenerd Beitrag anzeigen
              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?

              Kommentar


              • #8
                Zitat von keks333 Beitrag anzeigen
                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]

                Kommentar


                • #9
                  Zitat von keks333 Beitrag anzeigen
                  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.

                  Kommentar


                  • #10
                    Zitat von onemorenerd Beitrag anzeigen
                    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]

                    Kommentar


                    • #11
                      Zitat von AmicaNoctis Beitrag anzeigen
                      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

                      Kommentar


                      • #12
                        Zitat von keks333 Beitrag anzeigen
                        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]

                        Kommentar


                        • #13
                          Zitat von AmicaNoctis Beitrag anzeigen
                          ... und wenn es in loungenews (alias b) gar keine nick-Spalte gibt?
                          Ach shit, ich hab mich verlesen. loungenews != loungeuser

                          Kommentar


                          • #14
                            Zitat von onemorenerd Beitrag anzeigen
                            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...

                            Kommentar


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

                              Kommentar

                              Lädt...
                              X