String über mehrere Spalten suchen

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

  • String über mehrere Spalten suchen

    Hallo miteinander,

    kennt jemand in mySQL eine Möglichkeit, einen String über mehrere Spalten zu suchen?

    Konkret:
    Ich habe eine Telefonnummer in verschiedene Spalten aufgeteilt:

    Tabelle: Person
    Spalte: Laendervorwahl, Vorwahl, Rufnummer

    also: 0049 | 30 | 12345678

    Nun bekomme ich aus einem anderen Teil meiner Anwendung die komplette Nummer 00493012345678 und würde gerne in einer SQL-Abfrage nachsehen, ob es diese Nummer in meiner Tabelle gibt.
    Ich kann übrigens die komplette Nummer nicht aufteilen, da nicht klar ist, wie lang die Vorwahl und wie lang die Rufnummer ist. Hier ist klar, 30 für Berlin, der Rest ist Rufnummer. Aber es kann ja auch wie folgt sein:

    0049 | 26543 | 123

    Vielen Dank im Voraus ...

    Stefan

  • #2
    Die triviale Lösung:

    WHERE CONCAT(Laendervorwahl, Vorwahl, Rufnummer) = '00493012345678'

    - MySQL :: MySQL 5.7 Reference Manual :: 13.5 String Functions

    Das ist aber nicht effizient, weil (wahrscheinlich) kein Index genutzt wird.

    Wie viele Nummern/Anfragen werden da denn so Pi mal Daumen erwartet? Optimieren kann man es im Zweifel aber auch später noch.



    Zur Info: Etwa in PostgreSQL gibt es „Indexes on Expressions“ (hieß früher glaube ich auch mal funktionale Indizes): https://www.postgresql.org/docs/curr...ressional.html So was kennt MySQL meines Wissens aber nicht oder nur sehr begrenzt.[1] Nötigenfalls könnte man in MySQL die Telefonnummer noch mal redundant insgesamt in einer Spalte ablegen. Siehe auch hier: http://stackoverflow.com/questions/1...index-in-mysql

    1: Ohne damit unbedingt ausdrücken zu wollen, dass das ein Vor- oder Nachteil ist. Man kann prinzipiell auch argumentieren, dass manche Zusatz-Features von Datenbanksystemen dazu beitragen, Workarounds für ungünstiges DB-Design oder für das Vermengen von Zuständigkeiten zwischen Anwendung und DB bereitzustellen. Anders gesagt, dass die eigentliche Lösung für ein Problem an einer anderen Stelle zu suchen ist. Aber das ist jetzt alles etwas abstrakt.
    Zuletzt geändert von mermshaus; 12.09.2016, 16:53.

    Kommentar


    • #3
      Hi,

      trivial reicht völlig, wenn es hoch kommt 20/Stunde.
      Vielen Dank, war genau das was ich gesucht habe.

      Gruß
      Stefan

      Kommentar

      Lädt...
      X