/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL bitwise AND
Fra : Birger


Dato : 10-02-08 14:16

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.



 
 
Birger (11-02-2008)
Kommentar
Fra : Birger


Dato : 11-02-08 10:54

8X
> $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";
8X

Virker fint.
Fejl i test-data, så der ikke var noget at finde, hvorfor den selvfølgelig
ikke finder noget...

2 dage ud af vinduet


Birger
-----
http://bbsorensen.dk
http://varmeretter.dk - hverdagsmad. Sundt, nemt, hurtigt og billigt. Daglig
opdatering.



Søg
Reklame
Statistik
Spørgsmål : 177578
Tips : 31968
Nyheder : 719565
Indlæg : 6409072
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste