phpbar.de logo

Mailinglisten-Archive

[php] query für Setwerte

[php] query für Setwerte

Sebastian Mendel lists at sebastianmendel.de
Fre Mar 14 07:41:44 CET 2008


Wolfgang Skupin schrieb:
> Hallo Hannes,
> 
> 
>> Guten Tag Wolfgang Skupin,
>>
>> am Donnerstag, 13. März 2008 um 17:20 schrieben Sie:
>>
>>
>>> hallo,
>>> habe eine Tabelle `im_source`  mit einer Set-spalte `medium`
>>> die Set-Werte sind in der Form
>>> 'keiner','ein wert','noch ein wert', etwas anderes',
>>> usw. eingetragen.
>>> für das Select- Query bekomme ich ein array mit
>>> dualzahlen  array( 2,4,8,16,32, ...);
>>> jeder Datensatz kann jede Kombination der Set-Werte enthalten oder nur den
>>> Wert 'kein' (1) .
>>> nun sollen alle DS ausgewählt werden die
>>> etweder min. einen oder x dieser Werte enthalten
>>> oder eben alle dieser Werten enthalten ( summe der Arraywerte )
>>
>>
>>>  SELECT `ims`.`id`  FROM  `im_source` AS `ims`  WHERE  1  AND 
>>> (`ims`.`medium` BETWEEN 2 AND 126 OR `ims`.`medium` = 2 OR `ims`.`medium` =
>>> 4 OR `ims`.`medium` =  8 OR `ims`.`medium` =  16 OR `ims`.`medium` =  32 OR
>>> `ims`.`medium` =  64 OR `ims`.`medium` = 126 )    ORDER BY 
>>> `ims`.`id`,`ims`.`Fileinsert`  DESC
>> 126 oder 128 , 128 waere die richtige 2er Potenz
>>
> 
> mein array enthält (2,4,8,16,32,64)
>  
> also in diesem Fall ist Bit 1 und Bit 8  nicht gesetzt
> sondern nur Bit 2 bis 7 das macht in der Summe 126
> 
> leider bekomme ich, wenn nur mit BETWEEN arbeite gleich gar keine 
> korrekte Werte. 

wenn du direkt mit den Bitwerten der SET-Spalte arbeiten willst, solltest du 
immer +0 verwenden, also:


`ims`.`medium` + 0 BETWEEN 2 AND 126


eventuell hilft dir ja auch EXPORT_SET()

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_export-set



-- 
Sebastian

php::bar PHP Wiki   -   Listenarchive