Select Like SQL

12/21/2018 11:33 Cc_Cc_Cc#1
hi,

ich wollte alle meine Städte ausgeben lassen in meinem SQL Befehl mit LIKE, jedoch bekomme ich folgendes problem:

Es gibt 2 Städte einmal namens Bunde und einmal Bünde.

Wenn ich jetzt Bünde eingebe zeigt er mir kein Ergebnis, dass bedeutet denk ich mal das er den Umlaut nicht erkennt? Was mach ich dagegen ? Bin nicht fündig geworden. Alle Einstellungen sind auf UTF-8 (In PHPmyadmin und als pdo Attribute:

SQL Code:
PHP Code:
SELECT `primary_key`,`zipcode`,`city`,`state`,`communityFROM `datasetWHERE `cityLIKE :city GROUP BY `cityLIMIT 100
12/21/2018 12:55 False#2
Quote:
Originally Posted by Cc_Cc_Cc View Post
hi,

ich wollte alle meine Städte ausgeben lassen in meinem SQL Befehl mit LIKE, jedoch bekomme ich folgendes problem:

Es gibt 2 Städte einmal namens Bunde und einmal Bünde.

Wenn ich jetzt Bünde eingebe zeigt er mir kein Ergebnis, dass bedeutet denk ich mal das er den Umlaut nicht erkennt? Was mach ich dagegen ? Bin nicht fündig geworden. Alle Einstellungen sind auf UTF-8 (In PHPmyadmin und als pdo Attribute:

SQL Code:
PHP Code:
SELECT `primary_key`,`zipcode`,`city`,`state`,`communityFROM `datasetWHERE `cityLIKE :city GROUP BY `cityLIMIT 100
Funktioniert dein Select in PHPmyadmin ?
Wie nutzt du LIKE wenn du keine wildcards nutzt ?

Btw. eine Spalte primary_key zu nenen ist nicht so schön^^
12/21/2018 16:16 Cc_Cc_Cc#3
Quote:
Originally Posted by .ƒaℓsє. View Post
Funktioniert dein Select in PHPmyadmin ?
Wie nutzt du LIKE wenn du keine wildcards nutzt ?

Btw. eine Spalte primary_key zu nenen ist nicht so schön^^
Benutze wildcards^^

PHP Code:
$param = ["city" => "{$query}%"];
.... 
In PHP funktioniert der select Befehl aber er zeigt mir da auch nicht die Stadt an...
12/21/2018 16:44 False#4
Quote:
Originally Posted by Cc_Cc_Cc View Post
Benutze wildcards^^

PHP Code:
$param = ["city" => "{$query}%"];
.... 
In PHP funktioniert der select Befehl aber er zeigt mir da auch nicht die Stadt an...
Ups mein fail.. bin aktuell nicht so ganz da...
Naja bekommst du bei PHPmyadmin den die Städte angezeigt ?
12/21/2018 17:07 Cc_Cc_Cc#5
Quote:
Originally Posted by .ƒaℓsє. View Post
Ups mein fail.. bin aktuell nicht so ganz da...
Naja bekommst du bei PHPmyadmin den die Städte angezeigt ?
Ja bekomme die angezeigt , wenn ich Group by weglasse zeigt er alles gut an. Bei meiner API werden Städte öfters angezeigt ich möchte den User ja nicht 10 mal Hamburg anzeigen lassen deswegen habe ich die Namen "eindeutig" gemacht mit Group by damit die Namen nicht mehrmals angezeigt werden sondern nur einmal
12/21/2018 21:30 False#6
Quote:
Originally Posted by Cc_Cc_Cc View Post
Ja bekomme die angezeigt , wenn ich Group by weglasse zeigt er alles gut an. Bei meiner API werden Städte öfters angezeigt ich möchte den User ja nicht 10 mal Hamburg anzeigen lassen deswegen habe ich die Namen "eindeutig" gemacht mit Group by damit die Namen nicht mehrmals angezeigt werden sondern nur einmal
Kannst du ein Export der Datenbank bereitstellen oder ein minimal setup wo der Fehler auftritt ?
12/21/2018 22:57 Cc_Cc_Cc#7
Quote:
Originally Posted by .ƒaℓsє. View Post
Kannst du ein Export der Datenbank bereitstellen oder ein minimal setup wo der Fehler auftritt ?
Es ist kein Fehler, also bzw es kommt keine Fehlermeldung er erkennt einfach den Umlaut nicht.

Hab das Problem aber gelöst.

PHP Code:
SELECT `primary_key`,`zipcode`,`city`,`state`,`communityFROM `datasetWHERE `cityLIKE BINARY :city GROUP BY BINARY `cityLIMIT 50
Hab Binary in den folgenden SQL-Code zugefügt.

Da jeder Buchstabe in der Tabelle Stadt großgeschrieben wird, habe ich noch die Funktion ucfirst eingesetzt.

Da z.b h = 104, und H = 72 ist.

Trotzdem verstehe ich immernoch nicht wieso er jetzt ohne Binary den Umlaut nicht erkennt aber naja was solls trotzdem danke für die Hilfe :D
12/21/2018 23:37 False#8
Quote:
Originally Posted by Cc_Cc_Cc View Post
Es ist kein Fehler, also bzw es kommt keine Fehlermeldung er erkennt einfach den Umlaut nicht.

Hab das Problem aber gelöst.

PHP Code:
SELECT `primary_key`,`zipcode`,`city`,`state`,`communityFROM `datasetWHERE `cityLIKE BINARY :city GROUP BY BINARY `cityLIMIT 50
Hab Binary in den folgenden SQL-Code zugefügt.

Da jeder Buchstabe in der Tabelle Stadt großgeschrieben wird, habe ich noch die Funktion ucfirst eingesetzt.

Da z.b h = 104, und H = 72 ist.

Trotzdem verstehe ich immernoch nicht wieso er jetzt ohne Binary den Umlaut nicht erkennt aber naja was solls trotzdem danke für die Hilfe :D
Naja schön gelöst ist es nicht wirklich..
Und mit Fehler meinte ich das das du keine Stadt rausbekommst..
Wollte nur ein minimal Setup (SQLs und PHP) wo der Fehler auftritt damit man es schnell gegentesten kann.

Btw. wenn du es schon so unschön machst hätte ein COLLATE utf8_bin evtl. auch schon gereicht...
12/21/2018 23:56 Cc_Cc_Cc#9
Quote:
Originally Posted by .ƒaℓsє. View Post
Naja schön gelöst ist es nicht wirklich..
Und mit Fehler meinte ich das das du keine Stadt rausbekommst..
Wollte nur ein minimal Setup (SQLs und PHP) wo der Fehler auftritt damit man es schnell gegentesten kann.

Btw. wenn du es schon so unschön machst hätte ein COLLATE utf8_bin evtl. auch schon gereicht...
Ist unschön aber hatte keine andere Option, nichtmal bei google hab es dieses thema.

Hab im Anhang hochgeladen falls du mal testen willst, musst halt nur noch bei config deine DB anpassen.
12/22/2018 01:53 False#10
Quote:
Originally Posted by Cc_Cc_Cc View Post
Ist unschön aber hatte keine andere Option, nichtmal bei google hab es dieses thema.

Hab im Anhang hochgeladen falls du mal testen willst, musst halt nur noch bei config deine DB anpassen.
Habe es mal kurz getestet und wenn du
Code:
;charset=UTF8
beim erzeugen von PDO nutzt sollte es gehen.
Beispiel:
Code:
<?php
header('Content-Type: text/html; charset=utf-8');
$pdo = new PDO('mysql:host=sql7.freemysqlhosting.net;dbname=sql7271086;charset=UTF8', 'sql7271086', 'RJK8HU9jP5');

$sql = "SELECT * FROM dataset WHERE city LIKE 'Bünde%' GROUP BY city";
echo '<pre>';
foreach ($pdo->query($sql) as $row) {
   var_dump($row) . "<br>";
}
echo '</pre>';
?>
Was je nachdem was für eine Kollation du hast noch auftreten kann ist das die Umlaute wie folgt erkannt werden:
ä => a
ü => u
ö => o
Sprich wenn du nach Müller ODER nach Muller suchst würdest du beides bekommen.
Um den "Fehler" zu behben kannst du einfach eine andere Kollation nutzen, z.B. utf8_swedish_ci oder auch utf8_german2_ci.

P.s. die Zugangsdaten im PHP-Code sind extra drin, die Datenbank ist eine schnell erstelle Testdatenbank :)
12/22/2018 10:33 Cc_Cc_Cc#11
Quote:
Originally Posted by .ƒaℓsє. View Post
Habe es mal kurz getestet und wenn du
Code:
;charset=UTF8
beim erzeugen von PDO nutzt sollte es gehen.
Beispiel:
Code:
<?php
header('Content-Type: text/html; charset=utf-8');
$pdo = new PDO('mysql:host=sql7.freemysqlhosting.net;dbname=sql7271086;charset=UTF8', 'sql7271086', 'RJK8HU9jP5');

$sql = "SELECT * FROM dataset WHERE city LIKE 'Bünde%' GROUP BY city";
echo '<pre>';
foreach ($pdo->query($sql) as $row) {
   var_dump($row) . "<br>";
}
echo '</pre>';
?>
Was je nachdem was für eine Kollation du hast noch auftreten kann ist das die Umlaute wie folgt erkannt werden:
ä => a
ü => u
ö => o
Sprich wenn du nach Müller ODER nach Muller suchst würdest du beides bekommen.
Um den "Fehler" zu behben kannst du einfach eine andere Kollation nutzen, z.B. utf8_swedish_ci oder auch utf8_german2_ci.

P.s. die Zugangsdaten im PHP-Code sind extra drin, die Datenbank ist eine schnell erstelle Testdatenbank :)
Hab die Kollation: utf8_german2_ci verwendet und es klappt. Danke dir vielmals^^