Zum Inhalt springen

WHERE...IN -Problem!

Erstellt am 15. Februar 2005 · 9 Antworten · letzte Antwort am 9. März 2005

Tags: Frage

osteiner ·

Hallo,

ich hänge gerade an einer SQL-Abfrage. Eigentlich nix großartiges, aber es geht nur fast...

Ich habe eine Abfrage:
SELECT * FROM tx_meins WHERE tx_meins.pid=44 AND 4 IN (category)

category ist ein BLOB einer Mehrfachauswahl im Backend mit dem Wert '3,4,8,11'

>>> Es wird kein Datensatz gefunden!

Ändere ich die Abfrage in:
SELECT * FROM tx_meins WHERE tx_meins.pid=44 AND 3 IN (category)

Dann wird ein Datensatz gefunden. Das funktioniert auch bei anderen Werten, solange im BLOB-Feld der erste Wert der Gesuchte ist.

tausche ich in der Abfrage category gegen eine Liste aus (3,4,8,11) spielt es keine Rolle an welcher Stelle der gesuchte Wert steht.

Was hab ich übersehen?

Vielen Dank
Oliver

Martoro ·

ich hätte gerade fast eine gleichlautenden frage gestellt :-))

allerdings funktioniert das bei mir auch nur mit zeichenketten und nicht mit echten datenbankfeldern.

ich benötige die funktion um userrechte in einer extension zu überrpüfen und möchte eigentlich ein statement alla

SELECT  * FROM  `tx_myext` WHERE 2 IN `tx_myext`.`allowed_groups`

ausführen ... ich hoffe dafür gibt es eine datenbanklösung ... die lösung per php wäre unelegant da ja erstmal auf verdacht alles aus der DB geholt werden müsste.

gruß Martin

Martoro ·

ich habe gerade mal den typo3 quelltext nach der verwendung von "subgroup" durchsucht. das wäre ja ein idealer kandidat für eine ähnliche abfrage ... leider wird dabei immer die liste per php mit explode und implode zerlegt und ausgewertet

eine lösung direkt per sql scheint also nicht allzu naheliegend zu sein ... falls du dennoch etwas findest bin ich ein dankbarer abnehmer

gruß Martin

osteiner ·

seltsam? Sind wir die einzigen, die "IN" verwenden (wollen), oder hat sonst keiner Probleme damit? Dann wäre es toll wenn uns diese Menschen doch mal einen Tip geben könnten was wir falsch machen.

Gruß
Oliver

Martoro ·

naja ich vermute das man in reinem mysql schon was machen könnte ... mit subselects oder ähnlichen nettigkeiten ... das würde aber vermutlich den dbal überfordern deshalb habe ich das auch nicht weiter verfolgt

ich suche mal ein mysql forum und frage da mal nach, gruß Martin

osteiner ·

irgendwie liegt es wohl an dem Datenbankfeld in der Klammer des IN

"...3 IN(dbfeld)..."

Weil: "... pid in ('.$conf['pidList']'.)..." funktioniert einwandfrei!

Oliver

Martoro ·

pid in ('.$conf['pidList']'.)

läuft ja auch auf

WHERE 6 IN (1,2,3,4,5,6,7,8,9)

raus

zumindest aus sicht von mysql ...er wertet offenbar das blob nicht als liste aus

Martoro ·
SELECT  * 
FROM  `be_groups` 
WHERE FIND_IN_SET(3,`subgroup`) AND FIND_IN_SET(4,`subgroup`)

zumindest funkt das bei mir

escapedPrisoner ·
osteiner schrieb

Ich habe eine Abfrage:
SELECT * FROM tx_meins WHERE tx_meins.pid=44 AND 4 IN (category)
category ist ein BLOB einer Mehrfachauswahl im Backend mit dem Wert '3,4,8,11'
>>> Es wird kein Datensatz gefunden!

Wenn jemand das in pure sql haben möchte muss man den blob-Datentyp in einen string casten. Man kann diesen workaround hernehmen:

anstatt category: left(category, 200)

Beim Wert 200 (=die stringlänge) muss man halt sicher gehen, dass die größtmögliche Liste nicht länger sein wird. Ansonsten halt 256 oder mehr einsetzen!

Greetz
Daniel