Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Ergebnisse einer Abfrage nur anzeigen wen in anderer Tabelle nicht vorhand

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Ergebnisse einer Abfrage nur anzeigen wen in anderer Tabelle nicht vorhand

    Hallo zusammen

    Irgendwie weis ich nicht so genau nach was suchen / wie suchen / beschreiben soll.

    Ich habe 2 Tabellen.

    widget_search: web_id, page_name, tag, name, content
    widget_search_help: tag, type, description

    Meine (gewünschte) Abfrage sollte folgendes Ergebniss zeigen:

    Alle Einträge von widget_search_help die in widget_search nicht vorhanden sind. Überprüfen lässt sich das mit dem "Tag" Eintrag.

    Im Moment löse ich das über 2 verschachtelte while abfragen, aber ich denke es müsste da doch sicher (Performancemässig) eine einfachere / vernünftigere Lösung geben.

    Kann mir da wer weiterhelfen?


    Meine "WHILE ABFRAGE"

    PHP-Code:
    $activated mysql_query("SELECT * FROM widget_search WHERE web_id='' AND page_name=''");
    $all_tags  mysql_query("SELECT * FROM widget_search_help");

                        while (
    $all_tags_fetched mysql_fetch_array($all_tags)) {
                            while (
    $activated_fetched mysql_fetch_array($activated)) {
                                if (
    $all_tags_fetched['name']<>$activated_fetched['name']) $add_to_list[] . $all_tags_fetched['name'];
                            }
                        } 
    PS: Der Fehelr in der Abfrage ist mir bewusst -> ich habe da nicht weitergearbeitet dran, um herauszufinden wie ich das "einfacher" lösen kann.


  • #2
    Ich bin's nochmals.

    So weit bin ich gekommen:
    PHP-Code:
                        $query3 mysql_query("SELECT widget_search_help.* FROM widget_search_help LEFT JOIN widget_search ON (widget_search_help.name=widget_search.name) AND widget_search.name IS NULL"); 
    gefunden und angepasst aus http://www.php.de/datenbanken/40919-...-finden-2.html

    Aber mit und ohne DISTINCT werden mir immer alle Einträge von Tabelle 1 ( widget_search_help ) angezeigt. Es sollte mir aber nur die Einträge ausgeben die in Tabelle 2 ( widget_search) nicht vorkommen...

    Ich sehr irgendwie den Wald nicht mehr..

    IS NULL und != gibt weder eine Fehlermeldung noch das gewünschte Resultat ... Hoffe jemand kann mir weiterhelfen.

    Kommentar


    • #3
      Die original mysql-Erweiterung ist veraltet (mysql_*-Funktionen) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
      Choosing an API
      Warum man mysql* generell nicht (mehr) nutzen sollte.
      Wie man von mysql* auf PDO umsteigt
      Wissenswertes zum Thema SQL-Injection
      Standards - Best Practices - AwesomePHP - Guideline für WebApps

      Kommentar


      • #4
        PHP-Code:
        SELECT
            
        `wsh`.*
        FROM
            
        `widget_search_help` `wsh`
        LEFT JOIN
            
        `widget_search` `wsON `wsh`.`name`=`ws`.`name`
        WHERE
            ISNULL
        (`ws`.`name`) 
        PHP-Kenntnisse: Fortgeschritten
        Scherz
        Standards - Best Practices - AwesomePHP - Guideline für WebApps

        Kommentar


        • #5
          rkr - danke dir für die wichtigen Infos. Es funktioniert jedoch auch nicht wen ich * weglasse.

          PHP-Code:
           $query3 mysql_query("SELECT widget_search_help.name FROM widget_search_help LEFT JOIN widget_search ON (widget_search_help.name=widget_search.name) AND widget_search.name IS NULL"); 
          funktioniert ebenfalls nicht

          Kommentar


          • #6
            Zitat von rkr Beitrag anzeigen
            Scherz
            Nein - eigentlich nicht und komme mir auch gerade nicht so vor aber gibt doch immer was wo man anstehen kann und einfach nicht darauf kommt.

            Kommentar


            • #7
              Vielen Dank für deine Hilfe rkr.

              Ich habe von Anfang an eigentlich alles richtig gemacht. Ich hatte nur noch ergänzende WHERE Klauseln eingebaut und da war auch der Fehler drin warum das nicht geklappt hat. Aus diesem Grund habe ich dann einige sehr (un)kreative Dinge ausprobiert.

              Mit folgender Abfrage klappt das jetzt alles

              PHP-Code:
              $query_res mysql_query("SELECT all_entrys.name "
              ."FROM widget_search_help AS all_entrys "
              ."LEFT JOIN widget_search AS activated "
               
              ."ON all_entrys.name=activated.name AND activated.web_id='#webID' AND activated.page_name='#pageNAME' WHERE isnull(activated.name)"); 
              Ich habe die Zuätzlichen Klauseln
              1tens: nach dem WHERE platziert.
              2tens: habe ich nur die Namen benutzt ( page_name ) anstatt tabelle.page_name.

              Kommentar

              Lädt...
              X