Abfrage Problem

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

  • Abfrage Problem

    Hallo,

    also ich habe folgendes Problem. Ich habe eine Tabelle in der es das feld aktiv gibt. Werte sind entweder 1 oder 0. So hier meine Abfrage:

    SELECT *
    FROM firma
    WHERE firma LIKE '%testfirma%'
    OR brancheninfos LIKE '%testfirma%'
    OR katname LIKE '%testfirma%'
    OR katschlagworte LIKE '%testfirma%'
    AND aktiv = '1'


    Habe auch einen Datensatz drin der Testfirma heisst. Jedoch hat er den wert 0 bei aktiv. Meine Abfrage ignoriert dies komplett und zeigt ihn trotzdem an. Hab es bisher immer so gelöst und funktionierte auch wunderbar aber jetzt nicht mehr. Wer kann mir einen Tip geben?

    gruß

    Hamstah

  • #2
    priorität explizit angeben:
    Code:
    ... WHERE (A OR B OR C OR D) AND E
    und nimm die hochkommata bei nummerischen werten weg.

    Kommentar


    • #3
      hmmm verstehe ich jetzt noch nicht ganz:

      also sollte es so heißen:

      SELECT * FROM firma WHERE (katname OR katschlagworte OR firma) LIKE '%testfirma%' AND aktiv=1


      Also ich habe es jetzt gelöst bekommen oder nicht wirklich verstanden warum es so ist. Habe die Abfrage nache aktiv nach vorne gesetzt. Jetzt funktioniert es. Kurze Erklärung wäre sehr hilfreich.

      Danke

      Kommentar


      • #4
        deine lösung ist nicht korrekt.

        die klammern setzst du um die bedingungen.
        eine bedingung ist eine "gleichung", sog. expression, z.b.

        a = 12

        oder

        b LIKE '%foo'

        mit den buchstaben habe ich natürlich die ausdrücke abgekürzt.

        Kommentar


        • #5
          Original geschrieben von hamstah
          also sollte es so heißen:

          SELECT * FROM firma WHERE (katname OR katschlagworte OR firma) LIKE '%testfirma%' AND aktiv=1
          Nein, das ist immer noch kompletter Blödsinn.

          Kurze Erklärung wäre sehr hilfreich.
          Beschäftige dich mit elementarer Aussagenlogik - insb. dem unterschiedlichen Rang von logischen Verknüpfungen.

          http://de.wikipedia.org/wiki/Aussagenlogik
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            wahsaga, afaik sind "und" und "oder" in der al. gleichrangig. die priorität muss in mysql definiert sein, auch wenn ich im manual auf die schnelle nichts finde.

            Kommentar


            • #7
              Ok danke für eure Hilfe. Jetzt funktioniert es richtig.

              Gruß

              Hamstah

              Kommentar


              • #8
                na dann zeig mal die query.

                Kommentar


                • #9
                  @Topicstarter
                  4+3*5 != (4+3)*5
                  aus diesem Grunde musst du Klammern setzen. Der Multiplikator hat die höhere Priorität als die Addition. Wenn du also das gewünschte Resultat willst musst du erst festlegen, dass die Addition bevorzugt werden soll. Und genau das machst du mit Klammern.

                  Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    @penizilin
                    http://dev.mysql.com/doc/refman/5.1/...recedence.html
                    Gemäss dieser Liste ist OR "minderwertiger" als AND
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      alles klar...

                      Kommentar


                      • #12
                        [klugscheiß]"AND" entspräche einer Multiplikation

                        (1*1 = 1 = true,
                        1*0 = 0 = false,
                        0*0 = 0 = false)

                        und "OR" einer Addition

                        (1+1 = 2 = true,
                        1+0 = 1 = true,
                        0 + 0 = 0 = false)

                        => Punktrechnung vor Strichrechnung => AND vor OR

                        [/klugscheiß]
                        ich glaube

                        Kommentar


                        • #13
                          Morgen,

                          sorry für die späte Antwort. Normalerweise habe ich nach dem Status abgefragt. Also hier meine query:

                          SELECT * FROM firma
                          WHERE status IN ('21', '24', '42', '52')
                          AND firma LIKE '%$suche%'
                          OR brancheninfos LIKE '%$suche%'
                          OR katname LIKE '%$suche%'
                          OR katschlagworte LIKE '%$suche%'

                          So funktioniert es.

                          Gruß

                          Hamstah

                          Kommentar


                          • #14
                            Naja, das findet aber nun auch Einträge, wo das Suchwort in z.B. brancheninfos vorkommt, der Status aber nicht in diesen vieren ist. Wenn das so sein soll... dann funktionierts.
                            ich glaube

                            Kommentar


                            • #15
                              hmm nee soll natürlich nicht so sein. er soll halt das suchwort mit den ganze einträgen vergleich und dann halt schauen wenn er was gefunden hat ob das dann auch eins von den vier stati hat. sonst natürlich nicht. also doch wohl nicht richtig.

                              Kommentar

                              Lädt...
                              X