Håber nogen har en forklaring / løsning på den her :
Har en tabel, hvor to af kolonnerne er defineret som SMALLINT UNSIGNED (
0-65535).
( kolonne eller attribut navne er kategori og ingred_type i det følgende).
Tanken er at de skal bruges som "flag" - et sat bit, indikerer et bestemt
tilhørsforhold eller egenskab.
Ved udtræk af databasen, foretages en bitwise AND, med den ønskede egenskab.
$query = "SELECT * FROM opskrifter WHERE ( kategori & CAST( '$tpr' AS
UNSIGNED)) > 0 ORDER BY ret";
$query = "SELECT * FROM opskrifter WHERE ( ingred_type & CAST( '$tpi' AS
UNSIGNED)) > 0 ORDER BY ret";
og det virker helt efter hensigten - så længe der kun spørges på een af dem.
(ret er en streng defineret UNIQUE - og det er ikke der ting går galt - de
følgende problemer eksisterer også helt uden ORDER BY...)
Kombineres udvælgelse med de to betingelser :
$query = "SELECT * FROM opskrifter WHERE ( kategori & CAST( '$tpr' AS
UNSIGNED)) > 0 AND ( ingred_type & CAST( '$tpi' AS UNSIGNED)) > 0 ORDER BY
ret";
går der ganske og aldeles kuk i tingene.
Der returneres kun rækker der KUN det 4. bit sat (8 dec/hex) i kategori.
Helt uanset værdien af $tpr...
Udvælgelsen med $tpi virker tilsyneladende stadig som den skal...
Jeg har forsøgt først at sætte parenteser om de enkelte udtryk, og derefter
om hele WHERE udtrykket - uden at det gør nogen forskel.
Har også forsøgt med diverse konverteringer og casting - ligeledes uden at
kunne få det ønskede resultat.
CAST som unsigned af PHP variable er nødvendig (php integers er signed - og
det _er_ konstateret, at det ikke virker uden.. ;>)).
Nogen der kan gennemskue hvor/hvorfor tingene går galt, og/eller hvad jeg
gør for at få denne udvælgelse til at fungere?
Har lidt svært ved at give link, da det forgår på admin side for en af
nedenstående sider, hvor der også er adgang til ting, der ikke skal deles
med nogen...
Tror i øvrigt ikke der er noget at hente forståelsesmæssigt, ved at kunne
konstatere at det ikke virker...
Birger
-----
http://bbsorensen.dk
http://varmeretter.dk - hverdagsmad. Sundt, nemt, hurtigt og billigt. Daglig
opdatering.