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
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
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
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
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
irgendwie liegt es wohl an dem Datenbankfeld in der Klammer des IN
"...3 IN(dbfeld)..."
Weil: "... pid in ('.$conf['pidList']'.)..." funktioniert einwandfrei!
Oliver
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
SELECT *
FROM `be_groups`
WHERE FIND_IN_SET(3,`subgroup`) AND FIND_IN_SET(4,`subgroup`)
zumindest funkt das bei mir
super! Bei mir gehts auch.
Vielen Dank
Oliver
osteiner schriebIch 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