PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   SQL / Datenbanken (https://www.php-resource.de/forum/sql-datenbanken/)
-   -   Where Like IN (...) ?? (https://www.php-resource.de/forum/sql-datenbanken/95328-where-like-in.html)

manuelone 27-01-2009 23:48

Where Like IN (...) ??
 
Hallo,

ich suche nach einer Möglichkeit aus einer MYSQL Tabelle alle Datensätze auszugeben wo z.b. das Feld ZAHL mit 1, 2 oder 3 anfängt.
Wenn das Feld = der Zahlen sein soll, würde das ja so aussehen:

PHP-Code:

SELECT FROM table WHERE zahl IN (1,2,3

Ich bräuchte praktisch sowas in der Art:

PHP-Code:

SELECT FROM table WHERE zahl LIKE IN ("1%","2%","3%"

Hat da jemand eine Funktion/Idee für mich? :)

wahsaga 27-01-2009 23:56

Re: Where Like IN (...) ??
 
WHERE funktionzumermittelndeserstenzeichensineinemstringdiedudirjetztimmysqlmanualmalsuchengehst(spalte) IN ('1', '2', '3')


(Alternativ mehrere Like-Vergleiche mit ODER verknuepfen.)

manuelone 28-01-2009 00:00

Sorry, war evtl. etwas ungenau.
Die Zeichenlänge der Zahl ist später variabel und die Anzahl der Zahlen ist auch varibel, also es könnte auch so aussehen:
12, 56, 2, 4678, 3, 95230

jmc 28-01-2009 00:31

Man gehe zum Manual und suche nach REGEXP ;)

onemorenerd 28-01-2009 00:40

SELECT ... WHERE CAST(zahl AS CHAR(1)) IN (1,2,3)

PHP-Desaster 28-01-2009 08:55

Das Feld heißt Zahl, beinhaltet in den ersten Zeichen Ziffern, ist aber kein Zahlentyp... Das erscheint mir doch etwas verkorkst.

manuelone 28-01-2009 11:37

Zitat:

Original geschrieben von onemorenerd
SELECT ... WHERE CAST(zahl AS CHAR(1)) IN (1,2,3)
Das ist schon mal gut, nur wie gesagt, wenn dort 122, 34, 4 funktioniert das nicht mehr, da ja CHAR(1) den Wert aus der Datenbank auf eine Ziffer kürzt. Manchmal müsste es aber auf zwei, drei oder mehr Ziffern kürzen.

@jmc, bei REGEXP habe ich leider nichts gefunden, wo mehrere mögliche Werte bearbeiten werden sondern immer nur einer...!?

@PHP-Desaster, hä? Das Feld kann auch Peterpan heißen, das ist nur ein Beispiel.

asp2php 28-01-2009 11:48

Zitat:

Original geschrieben von manuelone
Das ist schon mal gut, nur wie gesagt, wenn dort 122, 34, 4 funktioniert das nicht mehr, da ja CHAR(1) den Wert aus der Datenbank auf eine Ziffer kürzt. Manchmal müsste es aber auf zwei, drei oder mehr Ziffern kürzen.
Was denn nun? Anfangs wolltest du:

Zitat:

Original geschrieben von manuelone
Hallo,

ich suche nach einer Möglichkeit aus einer MYSQL Tabelle alle Datensätze auszugeben wo z.b. das Feld ZAHL mit 1, 2 oder 3 anfängt.

Und nun?

manuelone 28-01-2009 12:00

Zitat:

Original geschrieben von manuelone
Sorry, war evtl. etwas ungenau.
Die Zeichenlänge der Zahl ist später variabel und die Anzahl der Zahlen ist auch varibel, also es könnte auch so aussehen:
12, 56, 2, 4678, 3, 95230

Eine Möglichkeit wäre, vorher eine SQL-Abfrage zu machen, wo das Feld ZAHL ausgelesen wird und die einzelnen Zahlen des Feldes in ein Array geschrieben werden und dann in einer Schleife die Where-Abfrage zusammenzubauen:

zahl LIKE "12%" OR zahl LIKE "56%" OR zahl LIKE "2%" OR zahl LIKE "4678%"

Aber das müsste doch auch eleganter gehen oder? Vorallem ist das glaub ich ziemlich langsam...

asp2php 28-01-2009 12:09

Dann musst du mit REGEXP arbeiten, z.B.

REGEXP '^[0-9]{1,}'

manuelone 28-01-2009 12:23

SELECT *
FROM ...
WHERE zahl REGEXP '^[0-9]{1,}'

Ich hab das gerade mal ausprobiert, da bekomme ich dann alle Datensätze ausgegeben. Hab leider noch nicht wirklich etwas mit Regexp gemacht und in der Doku wird das auch nicht gerade easy erklärt. Könntest du mir evtl. kurz erläutern was du dir dabei jetzt gedacht hast, bzw. was davon jetzt z.b. 13, 23, 235, 3 wäre?

asp2php 28-01-2009 12:25

einfach hier: http://dev.mysql.com/doc/refman/5.1/en/regexp.html lesen ;)

^: am Anfang des Strings
[0-9]: Zahlen von 0 bis 9
{n,m}: mindestens n characters, max. m characters, ohne m = unendlich, also {1,} => mindestens 1 oder mehr.

manuelone 28-01-2009 12:39

DANKE!
Dein Beispiel hab ich nicht verstanden ^^
Aber die Doku war dann doch hilfreich:

SELECT *
FROM ...
WHERE zahl REGEXP '^(561|4516|3)'


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:10 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG