Sophie: Artikel nicht anzeigen, wenn Status = 0

Hallo,

ich verstehe es nicht richtig. Folgenden Code funktioniert teilweise:

WHERE status = 1 AND MATCH(`a_titel`) AGAINST(? IN BOOLEAN MODE) OR tags.t_titel LIKE ? OR id =? GROUP BY id  ORDER by id DESC

Wenn ich jetzt in meine Suche z.B. das Wort Test eingebe findet er nichts, wenn ich jetzt die ID 1000 eingebe, die dem Test zugeordnet ist, wird der Artikel gefunden. Ich habe das Gefühl das hat etwas mit dem status = 1 zu tun ?

  1. Hi,

    ich verstehe es nicht richtig. Folgenden Code funktioniert teilweise:

    WHERE status = 1 AND MATCH(`a_titel`) AGAINST(? IN BOOLEAN MODE) OR tags.t_titel LIKE ? OR id =? GROUP BY id  ORDER by id DESC
    

    Wenn ich jetzt in meine Suche z.B. das Wort Test eingebe findet er nichts, wenn ich jetzt die ID 1000 eingebe, die dem Test zugeordnet ist, wird der Artikel gefunden. Ich habe das Gefühl das hat etwas mit dem status = 1 zu tun ?

    wie sieht der betroffene Datensatz aus?

    Und für welchen der vielen Parameter hast Du "Test" angegeben?

    cu,
    Andreas a/k/a MudGuard

    1. Hallo,

      der Betroffene Datensatz mit der ID 1000 hat in der Datenbank im Feld status eine 0 stehen, sprich er dürfte nicht gefunden werden. Suche ich nach dem Titel, in diesem Fall Test wird dieser nicht angezeigt, suche ich nach der ID 1000 wird dieser Datensatz angezeigt, was ich eigentlich nicht möchte.

      Ich frage mich warum, das status=1 nicht in beiden Fällen anspringt?

      1. Hallo,

        Ich frage mich warum, das status=1 nicht in beiden Fällen anspringt?

        Hilft's wenn du entsprechende Klammern setzt?

        Gruß
        Kalk

        1. Hallo,

          wo müssten die Klammern hin?

          1. Hallo,

            wo müssten die Klammern hin?

            So, dass deine gewünschten Bedingungen entsprechend gebündelt werden: Du hast eine Bedingung A, die auf jedenfall zutreffen soll und drei ondere B,C,D von denen eine gelten soll.
            Also: A und ( B oder C oder D )

            Gruß
            Kalk

            1. Hallo Kalk,

              danke für deine Erklärung, das war die erste die mir hier in diesem Beitrag auch wirklich weitergeholfen hat.

              1. Hallo,

                danke für deine Erklärung, das war die erste die mir hier in diesem Beitrag auch wirklich weitergeholfen hat.

                Naja, ich hab für dich einen Fisch gefangen. Die anderen haben versucht, dir das Fischen beizubringen.

                Gruß
                Kalk

      2. Hallo Sophie,

        was bindet denn stärker, AND oder OR? Hast du es schon mit Klammern ausprobiert?

        Viele Grüße
        Robert

        1. Hallo Robert,

          wenn ich ehrlich bin weiß ich nicht was stärker bindet. Und weiß auch nicht was du mit Klammern meinst.

          1. Hallo Sophie,

            dann schlag doch mal in der Doku deines verwendeten Datenbanksystems nach, wie mehrere WHERE-Bedingungen miteinander verkettet ausgewertet werden. Mit Klammern meine ich ( und ).

            Viele Grüße
            Robert

            P.S.: Das „Self“ in SELFHTML steht für Selbsterkenntnis.

            1. Hallo,

              was soll ich groß nachlesen, wenn ich nicht weiß was in die Klammern soll? Ich habe hier etwas gefunden: https://www.php-kurs.com/mysql-select-anweisung.htm da steht auch etwas mit den () nur wo muss mein status=1 in die Klammern?

              1. Hallo Sophie,

                was soll ich groß nachlesen, wenn ich nicht weiß was in die Klammern soll? Ich habe hier etwas gefunden: https://www.php-kurs.com/mysql-select-anweisung.htm

                Was war an diesem Satz eigentlich unverständlich?

                dann schlag doch mal in der Doku deines verwendeten Datenbanksystems nach

                Du wirst doch wissen, was für eine Datenbank du verwendest.

                da steht auch etwas mit den () nur wo muss mein status=1 in die Klammern?

                In dem von dir verlinkten Dokument ist sogar ein passendes Beispiel mit AND, OR und klammern der logischen Ausdrücke. Die Frage ist doch, welche deiner Bedingungen sollen wie greifen? Ich verstehe dein Ausgangsbeispiel wie folgt: (Mindestens) Eine dieser Bedingungen muss erfüllt sein:

                • status = 1 AND MATCH(a_titel) AGAINST(? IN BOOLEAN MODE)
                • tags.t_titel LIKE ?
                • id =?

                Viele Grüße
                Robert

                1. Hallo,

                  was soll ich groß nachlesen, wenn ich nicht weiß was in die Klammern soll? Ich habe hier etwas gefunden: https://www.php-kurs.com/mysql-select-anweisung.htm

                  Was war an diesem Satz eigentlich unverständlich?

                  dann schlag doch mal in der Doku deines verwendeten Datenbanksystems nach

                  Du wirst doch wissen, was für eine Datenbank du verwendest.

                  Ja, und hast du überhaupt den Link aufgerufen oder gelesen, was in der URL steht? Scheinbar nicht? Denn da steht MYSQL, also habe ich die wohl auch.

                  In dem von dir verlinkten Dokument ist sogar ein passendes Beispiel mit AND, OR und klammern der logischen Ausdrücke. Die Frage ist doch, welche deiner Bedingungen sollen wie greifen? Ich verstehe dein Ausgangsbeispiel wie folgt: (Mindestens) Eine dieser Bedingungen muss erfüllt sein:

                  • status = 1 AND MATCH(a_titel) AGAINST(? IN BOOLEAN MODE)
                  • tags.t_titel LIKE ?
                  • id =?

                  Richtig, es muss mindestens eine greifen. Wenn ich nach dem Titel suche, dann soll das status=1 auf den Titel angewendet werden, wenn ich nach der ID suche, dann auf die ID und wenn ich nach Tags suche, dann auf Tags.

                  So geht es auch nicht

                  WHERE (MATCH(`titel`) AGAINST(? IN BOOLEAN MODE)) OR (tags.t_titel LIKE ? AND status=1) (OR id =? AND status=1)  GROUP BY id  ORDER by id DES
                  
                  1. Hallo,

                    so wird das stauts=1 auch bei der ID angewednet

                    WHERE (status = 1 AND (MATCH(`titel`) AGAINST(? IN BOOLEAN MODE))) OR (tags.t_titel LIKE ? OR id =? AND status = 1) GROUP BY id  ORDER by id DESC
                    
                  2. Hallo Sophie,

                    Ja, und hast du überhaupt den Link aufgerufen oder gelesen, was in der URL steht? Scheinbar nicht? Denn da steht MYSQL, also habe ich die wohl auch.

                    Warum sollte er? Er weiß, wie ggf. Klammern zu setzen wären. Die Doku soll dir helfen, die Abfrage nach deinen Wünschen zu erstellen.

                    Bis demnächst
                    Matthias

                    --
                    Rosen sind rot.
                    1. Hallo,

                      ich habe Bezug auf diese Aussage genommen

                      Du wirst doch wissen, was für eine Datenbank du verwendest.

                      Ich habe genau nach einer MySQL Dokumentation auf Deutsch gesucht und auch eine gefunden, diese habe ich auch verlinkt. Und in der URL steht ganz klar mySQL.

                      Aber ist ja jetzt auch egal, ich habe es hinbekommen. Ich weiß zwar nicht warum es jetzt funktioniert aber man muss ja auch nicht alles wissen wie was funktioniert.

                      1. Hallo,

                        Aber ist ja jetzt auch egal, ich habe es hinbekommen. Ich weiß zwar nicht warum es jetzt funktioniert aber man muss ja auch nicht alles wissen wie was funktioniert.

                        egal, ob du das als Hobby oder als Beruf machst, bei der Einstellung solltest du dir was anderes suchen.

                        Gruß
                        Jürgen

                        1. Nein ganz und gar nicht. Man kann nicht alles wissen bzw. man muss nicht alles wissen. Es reicht oft dass es funktioniert. Nicht jeder kann alles wissen.

                          1. Hallo Sophie,

                            Genau deswegen eckst du hier so oft an. Was du hier ablehnst, sind grundsätzliche Basiskenntnisse, die bei allen Programmierarbeiten immer wieder anfallen, unabhängig von der Sprache. Logische Ausdrücke MUSS man schreiben und verstehen können, d.h. man muss wissen, dass AND stärker bindet als OR, und man muss die Regeln des logischen „negierten Ausmultiplizierens“ kennen (sprich: Regeln von de Morgan).

                            Einige deiner Fragen oder Verzweiflungsausbrüche hier stammen genau aus dieser Wissenslücke, und daher sind viele hier motiviert, dich zum Schließen dieser Lücke zu motivieren.

                            Leider habe ich spontan keine gute Quelle für dich, und die ersten Google-Treffer zu „Einführung Boolesche Algebra“ scheinen SEHR theoretisch. Ich glaube, ich muss dazu mal was hier ins Wiki schreiben (oder habe ich übersehen, dass es schon was gibt?)

                            Rolf

                            --
                            Dosen sind silbern
                            1. Hallo,

                              daher sind viele hier motiviert, dich zum Schließen dieser Lücke zu motivieren.

                              vielleicht muss man da irgendwann ein "noch" einfügen…

                              Gruß
                              Kalk

                            2. Hallo Rolf B,

                              Leider habe ich spontan keine gute Quelle für dich,

                              Allein, ohne das Unterrichtsgespräch ist sie nicht überragend: http://selfhtml.apsel-mv.de/theoretische_Informatik/00-alo.pdf

                              ich muss dazu mal was hier ins Wiki schreiben (oder habe ich übersehen, dass es schon was gibt?)

                              Gute Idee.

                              Bis demnächst
                              Matthias

                              --
                              Rosen sind rot.
                          2. Hallo Sophie,

                            Nein ganz und gar nicht. Man kann nicht alles wissen bzw. man muss nicht alles wissen. Es reicht oft dass es funktioniert. Nicht jeder kann alles wissen.

                            Das, was du vorhast, ist Cargo-Kult-Programming (siehe das P.S. dort) und das wird dich früher oder später nur noch mehr verzweifeln lassen. Es funktioniert, aber du weißt nicht wieso und wenn es irgendwann nicht mehr klappt, stehst du ratlos da bzw. du kannst die Lösung deines Problems nicht auf andere deiner Probleme übertragen.

                            Wenn du dich ein wenig in die Materie einarbeitest, kannst du auch zielgerichteter Fragen stellen und bekommst passendere Antworten. Das sollte es doch wert sein.

                            Viele Grüße
                            Robert

                  3. Hallo Sophie,

                    Ja, und hast du überhaupt den Link aufgerufen oder gelesen, was in der URL steht? Scheinbar nicht? Denn da steht MYSQL, also habe ich die wohl auch.

                    Wenn ich den Link nicht aufgerufen hätte, woher sollte ich dann wissen, dass dort ein für dich passendes Beispiel ist?

                    Worauf ich hinaus wollte: Der von dir gepostete Link führt nicht zur Doku deines Datenbanksystems. Und ich empfehle dir im Sinne des SELFHTML-Gedankens einen Blick in die offizielle MySQL-Dokumentation zu werfen, weil dort alles beschrieben ist.

                    Viele Grüße
                    Robert