Mario: Sqlite: Suchfunktion scheitert

Hi,

select * from test_5 where name||str||plz||ort||tel||eml||info LIKE '%test%';

funktioniert. Aber nur wenn alle Felder  auch einen Inhalt haben, sonst kommt kein Ergebnis obwohl der Suchbegriff in einem der Felder auftritt. Was ist falsch?

Mario

  1. Hallo,

    select * from test_5 where name||str||plz||ort||tel||eml||info LIKE '%test%';
    funktioniert. Aber nur wenn alle Felder  auch einen Inhalt haben, sonst kommt kein Ergebnis obwohl der Suchbegriff in einem der Felder auftritt. Was ist falsch?

    Deine Vorstellung, welche Auswirkung NULL-Werte haben.

    Freundliche Grüße

    Vinzenz

    1. Hi,

      »» select * from test_5 where name||str||plz||ort||tel||eml||info LIKE '%test%';
      »» funktioniert. Aber nur wenn alle Felder  auch einen Inhalt haben, sonst kommt kein Ergebnis obwohl der Suchbegriff in einem der Felder auftritt. Was ist falsch?

      Deine Vorstellung, welche Auswirkung NULL-Werte haben.

      Nicht jeder kann perfekt englisch. Wie wärs mit eine deutschen Interpretation?

      Mario

      1. Hello,

        Nicht jeder kann perfekt englisch. Wie wärs mit eine deutschen Interpretation?

        (fast) jede Standardoperation mit NULL ergibt NULL - dementsprechend auch Concat, Addieren, Subtrahieren, ... - ein Vergleich mit NULL ergibt ebenfalls NULL. Eine WHERE-Klasusel für einen Datensatz mit NULL gilt als "nicht zutreffend".

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        There's no such thing as a free lunch  --  Milton Friedman
        1. Hi,

          »» Nicht jeder kann perfekt englisch. Wie wärs mit eine deutschen Interpretation?
          (fast) jede Standardoperation mit NULL ergibt NULL - dementsprechend auch Concat, Addieren, Subtrahieren, ... - ein Vergleich mit NULL ergibt ebenfalls NULL. Eine WHERE-Klasusel für einen Datensatz mit NULL gilt als "nicht zutreffend".

          Also ist meine Abfrage wohl sowas wie concat, es wird als einzelnes Feld gesehen? Hmm, die Möglicheit dieser Abfrage habe ich irgendwann mal hier im Forum gefunden, aber wenn es so wohl nicht geht wie dann, ohne jedes einzelne Feld mit where feld2 like'%%' or feld2 like'%%'...?

          Mario

          1. Stop:

            Maine Aussage:

            Also ist meine Abfrage wohl sowas wie concat, es wird als einzelnes Feld gesehen?

            kann ja auch wieder nicht stimmen, denn wenn es als ein Feld gesehen würde wär ja trotzdem der Suchbegriff drin, also verstehe ich es immer noch nicht.

            Mario

            1. Hi,

              Maine Aussage:

              Also ist meine Abfrage wohl sowas wie concat, es wird als einzelnes Feld gesehen?

              kann ja auch wieder nicht stimmen, denn wenn es als ein Feld gesehen würde wär ja trotzdem der Suchbegriff drin, also verstehe ich es immer noch nicht.

              Rouven sagte es doch bereits:

              (fast) jede Standardoperation mit NULL ergibt NULL - dementsprechend auch Concat, Addieren, Subtrahieren, ...

              Also nein, dann wäre dein Suchbegriff nicht mehr "drin", wenn eine der Spalten NULL enthält.

              MfG ChrisB

              --
              Light travels faster than sound - that's why most people appear bright until you hear them speak.
              1. Hi,

                Rouven sagte es doch bereits:
                »» > (fast) jede Standardoperation mit NULL ergibt NULL - dementsprechend auch Concat, Addieren, Subtrahieren, ...

                Also nein, dann wäre dein Suchbegriff nicht mehr "drin", wenn eine der Spalten NULL enthält.

                will wohl irgendwie nicht in meinem Kopf, weil ich || eben als "oder" ansehe. Aber gut wenn es so ist, ist es eben so.

                Nur, wie kann ich dann ein vernünftige Suche auf alle Felder anwenden, auch wenn einige leer sind?

                Erstaunlich dass Google mich da nicht weiterbringt.

                Mario

                1. Hallo,

                  will wohl irgendwie nicht in meinem Kopf, weil ich || eben als "oder" ansehe. Aber gut wenn es so ist, ist es eben so.

                  ist im Ausnahmefall des SQL-Dialektes von MySQL so. Andere Dialekte vie der von SQLite unterstützte Dialekt sehen das anders (Oracle übrigens auch).

                  Nur, wie kann ich dann ein vernünftige Suche auf alle Felder anwenden, auch wenn einige leer sind?

                  Erstaunlich dass Google mich da nicht weiterbringt.

                  Eine Archivsuche lieferte Dir viele, viele Treffer zu COALESCE(), die auch SQLite kennt.

                  Freundliche Grüße

                  Vinzenz

                  1. Hi,

                    Eine Archivsuche lieferte Dir viele, viele Treffer zu COALESCE(), die auch SQLite kennt.

                    Irgendwie kommt mir das hier vor wie wenn einer fragt: Wie wechsele ich einen Autoreifen? Und zur Antwort bekommt: Lerne erst mal 3 Jahre Automechaniker, dann gehts....

                    Mario

                    1. Hello,

                      Irgendwie kommt mir das hier vor wie wenn einer fragt: Wie wechsele ich einen Autoreifen? Und zur Antwort bekommt: Lerne erst mal 3 Jahre Automechaniker, dann gehts....

                      Ne, eigentlich nicht. Was dir eigentlich gerade passiert ist:
                      "ich hab versucht, die Radmuttern mit einem 15mm-Schlüssel zu lösen - hat nicht geklappt"
                      Als Antwort hast du bekommen:
                      "Sie mal da drüben auf dem Tisch, da müsste noch ein 17mm-Schlüssel liegen, der sollte besser passen"

                      MfG
                      Rouven

                      --
                      -------------------
                      sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                      Death is nature's way of telling you to slow down.
                      1. Hi,

                        Als Antwort hast du bekommen:
                        "Sie mal da drüben auf dem Tisch, da müsste noch ein 17mm-Schlüssel liegen, der sollte besser passen"

                        Nur zu dumm dass der dann auch nicht passt. Aber davon abgesehen, sind die bisherigen Antworten zu dieser bestimmt einfachen Frage(wenn man es einmal weiss) ein Paradebeispiel, wie Antworten nicht ausfallen sollten. Aber darüber gab es ja hier schon oft genug Diskussionen, ja ich stehe auch auf dem Standpunkt den SelfFaktor zu nutzen, aber man kann es auch übertreiben.

                        Ein Antwort ala "Null Felder ergeben bei solchen Abfragen immer Null aus dem und dem Grund und eine sinnvolle Abfrage ist daher nur möglich wenn man das macht wie im Beispiel siehe: URL" hätte mir(und auch bestimmt später anderen) wesentlich mehr gebracht stundenlang irgendwelche Seiten zu durchforsten ohne überhaupt mal in die Nähe einer Lösung zu gelangen.

                        Mario

                        1. Hello,

                          Ein Antwort ala "Null Felder ergeben bei solchen Abfragen immer Null aus dem und dem Grund

                          gab ich dir, indem ich dir (im Anschluss an Vinzenz) dir sagte, dass Operationen mit NULL NULL ergeben.

                          und eine sinnvolle Abfrage ist daher nur möglich wenn man das macht wie im Beispiel siehe: URL" [...] Nähe einer Lösung zu gelangen.

                          hat Vinzen getan, indem er dich auf COALESCE hingewiesen hat, mit dem du den ersten NICHT-NULL-Wert suchen kannst. Wenn du weitere Anforderungen hast, wirst du etwas überlegen müssen. Und ich poche immer wieder darauf: deskchecking: wie gehst du vor, wenn du es auf einem Blatt Papier machst?
                          Du SELECTierst einen Satz
                          FROM stapel
                          WHERE (spalte_x enthält einen Wert UND spalte_x enthält meinen gesuchten Wert)
                          OR (spalte_y enthält einen Wert UND spalte_y enthält meinen gesuchten Wert)

                          MfG
                          Rouven

                          --
                          -------------------
                          sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                          Vegetarier essen meinem Essen das Essen weg.
                          1. Hi,

                            »» Ein Antwort ala "Null Felder ergeben bei solchen Abfragen immer Null aus dem und dem Grund
                            gab ich dir, indem ich dir (im Anschluss an Vinzenz) dir sagte, dass Operationen mit NULL NULL ergeben.

                            »»

                            ja hast "du" getan, nicht aber Vincenz. Und damit kam ich zur nächsten vorhersehbaren Frage.

                            hat Vinzen getan, indem er dich auf COALESCE hingewiesen hat, mit dem du den ersten NICHT-NULL-Wert suchen kannst.

                            Die Erklärungen die ich zu COALESCE finden konnte bedürfen anscheinend selbst eines ausgedehenten Studiums, denn da ich kein funktionierendes Beispiel finden konnte habe ich "probiert wie verstanden" aber da kommen dann auch wieder nur Syntaxfehler.

                            Wenn du weitere Anforderungen hast, wirst du etwas überlegen müssen. Und ich poche immer wieder darauf: deskchecking: wie gehst du vor, wenn du es auf einem Blatt Papier machst?
                            Du SELECTierst einen Satz
                            FROM stapel
                            WHERE (spalte_x enthält einen Wert UND spalte_x enthält meinen gesuchten Wert)
                            OR (spalte_y enthält einen Wert UND spalte_y enthält meinen gesuchten Wert)

                            Das verstehe ich jetzt so, dass es anscheinend keine Lösung gibt und ich doch alles in OR Anweisungen abfragen muss. Na dann hätte mir diese Antwort viel Zeit und Mühe erspart. Dann kann ich mich ja jetzt wieder meinem Projekt widmen was bis morgen fertig sein muss und hoffen nicht nochmal 4 Stunden wegen einer sinnlosen Frage zu verschenken.

                            Danke
                            Mario

                            1. Hello,

                              Die Erklärungen die ich zu COALESCE finden konnte bedürfen anscheinend selbst eines ausgedehenten Studiums, denn da ich kein funktionierendes Beispiel finden konnte habe ich "probiert wie verstanden" aber da kommen dann auch wieder nur Syntaxfehler.

                              huch? Nimms mir nich krumm, aber ist
                              --
                              coalesce(X,Y,...) Return a copy of the first non-NULL argument.
                              --
                              so schwer zu verstehen? Die Funktion nimmt eine beliebige (fast) Menge von Parametern auf und liefert den ersten zurück, der NICHT NULL ist.
                              COALESCE(meine_spalte, '') liefert also meine_spalte, sofern meine_spalte einen Wert hat, '' sonst.

                              Das verstehe ich jetzt so, dass es anscheinend keine Lösung gibt und ich doch alles in OR Anweisungen abfragen muss.

                              ja und nein. Eine Kombination aus beiden Lösungswegen ist ebenfalls möglich. Dein Grundproblem ist einfach, dass dein CONCAT niemals das NULL zu sehen bekommen darf. Du kannst also auch einfach, siehe COALESCE, den NULL-Wert vorher eliminieren und dann konkatenieren:
                              WHERE wert_garantiert_nicht_NULL||anderer_wert_garantiert_nicht_NULL LIKE '...'

                              MfG
                              Rouven

                              --
                              -------------------
                              sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                              "I wish it need not have happened in my time" - "So do I, and so do all who live to see such times. But that is not for them to decide. All we have to decide is what to do with the time that is given us."  --  J.R.R. Tolkien: "The Lord Of The Rings: The Fellowship Of The Ring"
                              1. Hi,

                                ich weiss wie schwierig es ist jemanden etwas beizubringen der nicht den gleichen Wissensstand hat. Aus dem Grund sind die meissten Fachbücher schlecht. Man hat einfach nicht mehr die Sichtweise eines Nichtwissenden.

                                Wenn ich nun:

                                select * from test_5 where coalesce(name,str,plz,ort,tel,eml,info) LIKE '%test%';

                                probiere kommt nichts.

                                Also muss es ja irgendwie anders funktionieren, mir nicht klar.

                                STOP: Es funktioniert doch, kleiner Copy&Paste Fehler hatte sich eingeschlichen. Danke.

                                Mario

                                1. Hello,

                                  select * from test_5 where coalesce(name,str,plz,ort,tel,eml,info) LIKE '%test%';
                                  probiere kommt nichts.

                                  ja. Stimmt. Lies nochmal aufmerksam meinen Beitrag. Das hier ist die einzige Variante, die dich nur in Ausnahmefällen ans Ziel bringt. COALESCE ist EINE Funktion die DEN ersten Wert liefert, der nicht NULL ist. EINEN Wert. Das ist aber nicht dein Ziel.
                                  Wie gesagt, kehre zurück zu meinem letzten Post:
                                  (1) nutze COALESCE um NULL-Spalten zu eliminieren
                                  (2) nutze CONCAT um alle Spalten auf einmal zu durchsuchen

                                  MfG
                                  Rouven

                                  --
                                  -------------------
                                  sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                                  Ambition is the last refuge of failure.  --  Oscar Wilde (Irish Poet, Novelist, Dramatist and Critic, 1854-1900)
                                  1. Hi,

                                    Wie gesagt, kehre zurück zu meinem letzten Post:
                                    (1) nutze COALESCE um NULL-Spalten zu eliminieren
                                    (2) nutze CONCAT um alle Spalten auf einmal zu durchsuchen

                                    oh nein, jetzt dachte ich endlich eine Lösung zu haben, jetzt das...

                                    Wie denn? Ich habe es jetzt so probiert:

                                    select * from test_5 where coalesce(name)||coalesce(str)||coalesce(plz)||coalesce(ort)||(coalesce(tel)||coalesce(eml)||coalesce(info) LIKE '%test%';

                                    geht nicht!

                                    Mario

                                    1. Hello,

                                      select * from test_5 where coalesce(name)||coalesce(str)||coalesce(plz)||coalesce(ort)||(coalesce(tel)||coalesce(eml)||coalesce(info) LIKE '%test%';
                                      geht nicht!

                                      stimmt. Erstens ist die Syntax falsch (beachte den Hinweis "mindestens zwei Parameter"), zweitens macht es auch einfach keinen Sinn: liefert den ersten Wert der Paramter, der nicht NULL ist. Du stellst keine Alternative bereit. Du sagst:
                                      Gib mir aus der Liste

                                      • name
                                        den ersten Wert, der NICHT NULL ist.
                                        Was soll passieren, wenn "name" NULL ist?
                                        Du musst einen Defaultwert bereitstellen, der eben in genau diesem Fall greift. Ich verweise erneut an mein eigenes Posting...

                                      MfG
                                      Rouven

                                      --
                                      -------------------
                                      sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                                      When the only tool you've got is a hammer, all problems start to look like nails.
                                      1. Hi,

                                        ok jetzt ist klar habe den zweiten Parameter nur als Platzhalter für weitere Feldnamen geshehen ala "...".

                                        Danke. Aber trotzdem auch wenn Vinzenz nun den Query fast vormacht, warum erst Stunden nach meiner Frage? Ihr wisst dich selbst was Zeitdruck ist. Und das man aus einen fertigen Query genauso viel lernen kann wie tausend Verweise auf irgendwelche Seiten ist auch klar. Ich kann verstehen wenn jemand sagt "wie funktioniert ein formailer, hat einer ein Script?" das man das dann anders handhabt, aber ich habe nur nach einem query gefragt.

                                        Wie auch immer nun scheint es zu laufen, fertig werde ich wohl heute Nacht nicht mehr und zu coalesce weiss ich jetzt auch nicht besonders viel, aber so was schlage ich dann nochmal nach wenn ich Zeit habe.

                                        Danke
                                        Mario

                                        1. Hello,

                                          Ihr wisst dich selbst was Zeitdruck ist.

                                          ja - wissen "wir". Ich mache das hauptberuflich. Ich weiß wie es ist, wenn Projektleiter hinter einem stehen und mit den Fingern trommeln. Get used to it. Das Problem ist, dass ein Entwickler, der sich Lösungen nicht erarbeiten kann zunehmend ins Hintertreffen gerät...

                                          Und das man aus einen fertigen Query genauso viel lernen kann wie tausend Verweise auf irgendwelche Seiten ist auch klar. Ich kann verstehen wenn jemand sagt "wie funktioniert ein formailer, hat einer ein Script?" das man das dann anders handhabt, aber ich habe nur nach einem query gefragt.
                                          Nacht nicht mehr und zu coalesce weiss ich jetzt auch nicht besonders viel

                                          ...eben weil du dir an dieser Stelle vollkommen widersprichst. Wir haben dir nicht mal ansatzweise bzw. erst sehr spät die fertige Lösung gegeben und trotzdem du hast sie nicht "verstanden" im Sinne von durchdacht. Wenn wir dir das fertige Query gegeben hättest, hättest du es 1:1 kopiert...So bestand die Hoffnung, dass du verstehst was warum wie funktioniert. Und auch wenn dein Druckmacher das heute Abend und morgen früh nicht zugeben will, eigentlich sind Leute die sich Themen erarbeiten und Erfahrungen sammeln deutlich wertvoller...

                                          MfG
                                          Rouven

                                          --
                                          -------------------
                                          sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                                          Ambition is the last refuge of failure.  --  Oscar Wilde (Irish Poet, Novelist, Dramatist and Critic, 1854-1900)
                                          1. Hi,

                                            Und auch wenn dein Druckmacher das heute Abend und morgen früh nicht zugeben will, eigentlich sind Leute die sich Themen erarbeiten und Erfahrungen sammeln deutlich wertvoller...

                                            nur solange sie dieses Wissen nicht wieder vergessen.

                                            Ich hatte gerade zu Anfangszeiten(und oft leider immer noch) den Drang zum Perfektionismus. Das bedeutet unweigerlich lesen, probieren, lesen, ...

                                            Und was kommt am Ende(zumindest bei mir ist das so) dabei raus?

                                            1. Unendlich viel Zeit geht dabei drauf
                                            2. Ich werde für eine gewisse Zeit fachlich top, aber
                                            3. ich vergesse das auch genau so schnell wie ich es gelernt habe

                                            Fazit: Trotz enormer Dokumentationen bin ich nicht in der Lage mir komplexe alte Scripte von mir wieder leicht in Erinnerung zu rufen.

                                            Beispiel: Ich benötige gleich wieder eine Uploadfunktion, das hatte ich doch schon mal... Ja die könnte ich dann auch wieder nutzen, aber diese Class die ich da erstellt habe ist so umfangreich und mit Sondermöglichkeiten (zb. Thumbnailgenerierung, Wasserzeichen, Archivierungen), dass ich gar nicht mehr beim Code lesen verstehe was ich da eigentlich alles genutzt habe.

                                            So wenn ich dann nun hier die Frage stelle, wieso ist move_upload_file besser als copy? würde ich wieder als kompletter Anfänger dastehen obwohl ich gerade bei dem Produkt schon hochwertige Arbeit abgeliefert habe. Und schon behandelt man mich dann auch so und verweist aufs Manual oder hinterfragt anstatt einfach nur zu antworten, was aber genau das wäre was ich bräuchte.

                                            2002 habe ich für eine Kontoverwaltung für eine Firma geschrieben, darin mehr als 20 Mysql tabellen die grösstenteils über komplizierte joinAbfragen
                                            funktionieren. Das Wissen das ich mir damals angeignet hatte um das Projekt zu erstellen ist weg.

                                            So habe ich nun die bekannte Erkenntnis eingesehen:
                                            "Man muss nicht wissen, nur wissen wo man nachschlägt."

                                            Und das klappt auch in der Regel ganz gut, nur zu meiner Frage heute konnte ich nichts finden.

                                            Mario

                                            1. Hello,

                                              So habe ich nun die bekannte Erkenntnis eingesehen:
                                              "Man muss nicht wissen, nur wissen wo man nachschlägt."

                                              das betrachte ich ganz und gar nicht als Widerspruch zu meiner vorherigen Aussage. Es geht mir überhaupt nicht um auswendiges Wissen. Die Welt ist IMHO zu komplex um sich darin auf vielen Gebieten sicher bewegen zu können. Aber die Fähigkeit sich ein Themengebiet zu erschließen, die ist wertvoll. Und unter erschließen verstehe ich eben NICHT blind eine Lösung zu übernehmen. Das halte ich für einen denkbar schlechten Weg. Intelligente Adaption möchte ich es mal nennen, das ist das Zauberwort.

                                              MfG
                                              Rouven

                                              --
                                              -------------------
                                              sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                                              We found ourselves looking upon a familiar sight. We were home. How do you pick up the threads of an old life? How do you go on... when in your heart you begin to understand... there is no going back? There are somethings that time cannot mend... some hurts that go too deep... that have taken hold.  --  The Lord of the Rings: The Return of the King (Peter Jackson)
                                              1. Hi,

                                                Intelligente Adaption möchte ich es mal nennen, das ist das Zauberwort.

                                                ja und insofern mal ein Beispiel wie ich mir eine perfekte Anwort vorgestellt hätte. Wäre die Antwort auf meine Frage gewesen:

                                                Felder ohne Werte stelle Null Werte dar und lassen sich somit nicht bei deiner Abfrage bearbeiten, weil bei der Operation wieder NULL rauskommt(also in etwa wie deine Antwort). Um dennoch deine Concatmöglichkeit zu nutzen müsstest du mit coalesce vorgehen in etwa: where coalesce(feld1)||coalesce(feld2) like ...

                                                Dann hätte ich das probiert und es hätte funktioniert. Da mir die Zeit fehlte hätte ich auch nicht nach Warum-Gründen gesucht oder gefragt, aber alleine aus Interesse hätte ich das nachgeholt und wenn nicht verstanden nochmals konkret nachgefragt.

                                                Aber mir wäre geholfen, mein Projekt fertig, und ich gutgelaunt.

                                                Nun habe ich zwar die Lösung aber um welchen Preis?

                                                Mario

                                                1. Bin wohl schon zu müde, mache es schon wieder falsch:

                                                  in etwa: where coalesce(feld1)||coalesce(feld2) like ...

                                                  Natürlich so ;-) :
                                                  in etwa: where coalesce(feld1,'')||coalesce(feld2,'') like ...

                                                  Mario

                                          2. yo,

                                            So bestand die Hoffnung, dass du verstehst was warum wie funktioniert.

                                            endloses thema bei selfhtml. ich denke, wenn jemand ein rohes ei haben will, gib ihm ein rohes ei, dann kann er damit seine spiegeleier selber bruzeln. wenn jemand schon ein fertiges spiegelei haben will, dann gib ihm das oder man läßt es einfach. man sollte ihm nicht das rohe ei aufdrängen wollen. als vorschlag sicherlich, aber jeder muss selbst entscheiden können, was in der jeweiligen situation gut oder nicht gut ist.

                                            ich habe auch nicht immer die zeit, alles selbst zu kochen, auch wenn das wesentlich gesünder wäre nud auch den geldbeutel freut.

                                            Ilja

                                2. Hallo,

                                  ich weiss wie schwierig es ist jemanden etwas beizubringen der nicht den gleichen Wissensstand hat. Aus dem Grund sind die meissten Fachbücher schlecht. Man hat einfach nicht mehr die Sichtweise eines Nichtwissenden.

                                  ich hab' vor allem keine Glaskugel.

                                  Ich kannte Deinen Wissensstand nicht. Ich ging davon aus, dass Du weißt, dass Du links eine Zeichenkette zusammenbaust und über LIKE nachschaust, ob Dein Suchwort enthalten ist. Woher sollte *ich* wissen, dass Du *nicht* weißt, was in SQLite der ||-Operator bewirkt?

                                  Wenn ich nun:
                                  select * from test_5 where coalesce(name,str,plz,ort,tel,eml,info) LIKE '%test%';

                                  dann ist dies falsch. Das liefert Dir vor dem Vergleich die erste nicht leere Spalte. Was ist wenn Dein Suchbegriff erst in der zweiten nichtleeren Spalte auftritt? Dann versagt Deine WHERE-Klausel.

                                  Rouven sagte dagegen:
                                  Baue eine garantiert nicht den Wert NULL enthaltene Zeichenkette zusammen, indem Du sie aus Einzelstücken zusammenbaust, die *aller* garantiert nicht NULL sind:

                                  COALESCE(name, '') ist garantiert nicht NULL, sondern gegebenenfalls der Leerstring. Dieser verfälscht Dir nicht Dein Ergebnis.

                                  COALESCE(str, '') ist garantiert nicht NULL, sondern gegebenenfalls der Leerstring. Dieser verfälscht Dir nicht Dein Ergebnis.

                                  COALESCE(name, '') || COALESCE(str, '') ist garantiert nicht NULL und liefert Dir Deinen Treffer auch dann, wenn das Suchwort in der Spalte str vorkommt und auch die Spalte name nicht leer ist.

                                  COALESCE(plz, '') ist garantiert nicht NULL, sondern gegebenenfalls der Leerstring. Dieser verfälscht Dir nicht Dein Ergebnis.

                                  COALESCE(name, '') || COALESCE(str, '') || COALESCE(plz, '') ist garantiert nicht NULL und liefert Dir Deinen Treffer auch dann, wenn das Suchwort in der Spalte plz vorkommt und auch die Spalten name (und/oder) str nicht leer sind.

                                  Die Fortsetzung müsstest Du selbst hinbekommen ...

                                  Freundliche Grüße

                                  Vinzenz

                    2. Hi,

                      Irgendwie kommt mir das hier vor wie wenn einer fragt: Wie wechsele ich einen Autoreifen? Und zur Antwort bekommt: Lerne erst mal 3 Jahre Automechaniker, dann gehts....

                      Na in deinem Falle sollte man vielleicht lieber antworten: Nimm dir ein Taxi, da brauchst du dich um nichts zu kümmern - und das ist bei deinem Kenntnisstand und deiner Bereitschaft, diesen durch eigene Recherche zu erweitern, wohl das beste.

                      MfG ChrisB

                      --
                      Light travels faster than sound - that's why most people appear bright until you hear them speak.
            2. Hallo,

              » Also ist meine Abfrage wohl sowas wie concat, es wird als einzelnes Feld gesehen?
              kann ja auch wieder nicht stimmen, denn wenn es als ein Feld gesehen würde wär ja trotzdem der Suchbegriff drin,

              Nein. Der Suchbegriff ist nicht enthalten.

              also verstehe ich es immer noch nicht.

              Welches Ergebnis erhältst Du bei der von mir angegebenen Abfrage?

              Freundliche Grüße

              Vinzenz

              1. Hi,

                Welches Ergebnis erhältst Du bei der von mir angegebenen Abfrage?

                Nur Fehler:
                ....sqlite_query() [function.sqlite-query]: near "||": syntax error in....

                Mario

                1. Hallo,

                  » Welches Ergebnis erhältst Du bei der von mir angegebenen Abfrage?

                  Nur Fehler:
                  ....sqlite_query() [function.sqlite-query]: near "||": syntax error in....

                  nutze einen vernünftigen Client und kein PHP :)
                  Das Ergebnis ist NULL.

                  Freundliche Grüße

                  Vinzenz

      2. Hallo,

        » »» Was ist falsch?
        » Deine Vorstellung, welche Auswirkung NULL-Werte haben.

        Nicht jeder kann perfekt englisch. Wie wärs mit eine deutschen Interpretation?

        Wo hast Du bisher gesucht? Es gibt auch deutschsprachige Doku zu SQL (nicht notwendigerweise zu SQLite, aber zu DBMS, die NULL-Werte vergleichbar handhaben).

        Tipp: Was liefert Dir SQLite bei der Abfrage

        SELECT 'etwas' || NULL

        zurück?

        Freundliche Grüße

        Vinzenz