{"id":69,"date":"2009-02-04T12:30:31","date_gmt":"2009-02-04T11:30:31","guid":{"rendered":"http:\/\/unckel.com\/blog\/?p=69"},"modified":"2019-12-07T22:31:01","modified_gmt":"2019-12-07T21:31:01","slug":"sql-suche-nach-mehreren-begriffen-ueber-mehrere-felder","status":"publish","type":"post","link":"https:\/\/unckel.de\/blog\/sql-suche-nach-mehreren-begriffen-ueber-mehrere-felder\/","title":{"rendered":"SQL: Suche nach mehreren Begriffen \u00fcber mehrere Felder"},"content":{"rendered":"<p>Eines vorweg &#8211; grunds\u00e4tzlich sollte man SQL-Befehle nicht, wie hier beschrieben, im Code zusammenbauen. Ein Problem sind vor allem\u00a0<a href=\"http:\/\/de.wikipedia.org\/wiki\/SQL_Injection\" target=\"_blank\" rel=\"noopener\">SQL-Injections<\/a>\u00a0welche z.B.\u00a0<a href=\"https:\/\/unckel.de\/v6\/post.aspx?id=207\">so<\/a>\u00a0umgangen werden k\u00f6nnen.<\/p>\n<p>Hier soll daher nur der Aufbau eines SQL-Statements, da\u00df mehrere Suchbegriffe \u00fcber mehrere Felder (Tabellen-Spalten) suchen kann, beschrieben werden. Einzelne Begriffe werden mit UND verkn\u00fcpft.<\/p>\n<pre>\/\/ C#\n\n\/\/ String mit mehreren Begriffen, von z.B. einer TextBox\nstring searchWords = TextBox1.Text;\n\n\/\/ die einzelnen Suchbegriffe in ein Array packen\nstring[] searchWordsArray = searchWords.Trim().Split();\n\n\/\/ beginn des SQL-Statements...\nstring sqlStatement = \"SELECT * FROM Tabelle WHERE\";\n\n\/\/ Pr\u00fcfung - gibt es \u00fcberhaupt was zu suchen\nif (!string.isEmptyOrNull(searchWords.Trim()))\n{\n  \/\/ einzelne Suchbegriffe extrahieren\n  foreach (string searchWord in searchWordsArray)\n  {\n    \/\/ Begriff darf in irgendeinem Felder stehen &gt; ODER,\n    \/\/ zweiter Begriff aber auch in irgendeinem Feld &gt; UND\n    sqlStatement += \"(Spalte1 LIKE '%\" + searchWord + \"%' OR Spalte2 LIKE '%\" + searchWord + \"%') AND \";\n  }\n\n  \/\/ letzte 4 Zeichen (AND) l\u00f6schen\n  sqlStatement = sqlStatement.Substring(0,sqlStatement.Length-5);\n}\n\n\/\/ ggf. noch eine Sortierung einf\u00fcgen...\nsqlStatement += \" ORDER BY DateCreated DESC \";<\/pre>\n<p><strong>SQL bei der Suche nach: &#8222;A&#8220;:<\/strong><\/p>\n<pre>SELECT *\nFROM Tabelle\nWHERE (Spalte1 LIKE '%\" + A + \"%' OR Spalte2 LIKE '%\" + A + \"%')\nORDER BY DateCreated DESC<\/pre>\n<p><strong>SQL bei der Suche nach: &#8222;A B C&#8220;:<\/strong><\/p>\n<pre>SELECT *\nFROM Tabelle\nWHERE (Spalte1 LIKE '%\" + A + \"%' OR Spalte2 LIKE '%\" + A + \"%') AND\n     (Spalte1 LIKE '%\" + B + \"%' OR Spalte2 LIKE '%\" + B + \"%') AND\n     (Spalte1 LIKE '%\" + C + \"%' OR Spalte2 LIKE '%\" + C + \"%')\nORDER BY DateCreated DESC<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eines vorweg &#8211; grunds\u00e4tzlich sollte man SQL-Befehle nicht, wie hier beschrieben, im Code zusammenbauen. Ein Problem sind vor allem\u00a0SQL-Injections\u00a0welche z.B.\u00a0so\u00a0umgangen werden k\u00f6nnen. Hier soll daher nur der Aufbau eines SQL-Statements, da\u00df mehrere Suchbegriffe \u00fcber mehrere Felder (Tabellen-Spalten) suchen kann, beschrieben werden. Einzelne Begriffe werden mit UND verkn\u00fcpft. \/\/ C# \/\/ String mit mehreren Begriffen, von [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71],"tags":[],"class_list":["post-69","post","type-post","status-publish","format-standard","hentry","category-webdesign"],"_links":{"self":[{"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/posts\/69","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/comments?post=69"}],"version-history":[{"count":1,"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/posts\/69\/revisions"}],"predecessor-version":[{"id":843,"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/posts\/69\/revisions\/843"}],"wp:attachment":[{"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/media?parent=69"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/categories?post=69"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unckel.de\/blog\/wp-json\/wp\/v2\/tags?post=69"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}