Avatar billede cyberdude Nybegynder
12. november 2005 - 13:15 Der er 11 kommentarer og
1 løsning

find værdi i database-array

Jeg har en variabel
$current
og et felt i min database ved navn
gruppe

Værdien i $current er numerisk (1, 2, 3 osv.) og indeholder KUN 1 tal af gangen, brugeren kan så skifte det efter behov.

Værdien i gruppe er numerisk (1,2,3,5,8) og indeholder en RÆKKE tal sepereret med , (komma)

Har fået fortalt at det ikke er "lovligt" at benytte , til seperator - men har ikke kunne hitte ud af hvad jeg så skal bruge ??

Problemet er at jeg skal hive
menu, nyheder, links, artikler m.m.m.
ud af databasen baseret på hvad der er angivet i $current....

eksemepl :
brugeren har værdien 2 i $current så vil jeg hive ALLE de menupunkter ud hvor der i feltet gruppe indgår tallet 2
har forsøgt med :
$get_menu_1 = sql("select * from menu where aktiv = 1 AND parent = 0 AND gruppe IN ($current) order by sort");

ovenstående retunere intet, og fjerner jeg () omkring $current giver den blot en fejl på noget efterfølgende kode....

Hvordan skal jeg sætte det op for at det vil fungere ??
Avatar billede bromer Nybegynder
12. november 2005 - 13:26 #1
Det er ikke særlig pæn database struktur at have værdier delt på den måde.
Avatar billede hmortensen Nybegynder
12. november 2005 - 13:27 #2
Du skal bytte rundt:
$current IN (gruppe)
Avatar billede bromer Nybegynder
12. november 2005 - 13:29 #3
hmortensen: Nej vel? Så vidt jeg kan se indeholder databasen et felt der er en steng som "1,2,3,4" og han skal finde ud om 3 er indeholdt i det.
Avatar billede bromer Nybegynder
12. november 2005 - 13:31 #4
Er det ikke mere noget du kan løse ved et regulært udtryk såsom:

mysql_query(sprintf("SELECT blah FROM blah WHERE gruppe REGEXP '(^|,)%d($|,)'",$current));
Avatar billede hmortensen Nybegynder
12. november 2005 - 13:45 #5
Ja, det var da noget være vrøvl jeg fik skrevet der.
Avatar billede bromer Nybegynder
12. november 2005 - 13:49 #6
;)
Avatar billede cyberdude Nybegynder
12. november 2005 - 14:18 #7
bromer -> det ser ud til at fungere...
men jeg har også nogle punkter hvor der ingen begrænsning er på, dvs feltet gruppe IKKE indeholder noget som helst, disse skal også med ud, har forsøgt at tilføje følgende


$get_menu_1 = sql(sprintf("SELECT * FROM menu WHERE aktiv = 1 AND parent = 0 AND gruppe REGEXP '(^|,)%d($|,)'",$current)" OR gruppe = ''");

Men det giver blot fejl....

Hvordan fikses det ??
Avatar billede cyberdude Nybegynder
12. november 2005 - 14:31 #8
Har fikset det ....
tænkte mig ikek lige om... kunne jo bare sætte den ind FØR og så bruge OR op til regexp tingen :-)

Den ser nu sådant her ud og funger :
$get_menu_1 = sql(sprintf("SELECT * FROM menu WHERE aktiv = 1 AND parent = 0 $pubadm AND gruppe = '' OR gruppe REGEXP '(^|,)%d($|,)'",$current));
Avatar billede cyberdude Nybegynder
12. november 2005 - 14:32 #9
bromer ->
Tak for hjælpen :-))
smid et svar...
Avatar billede cyberdude Nybegynder
12. november 2005 - 14:37 #10
og så alligevel funger det ikek helt optimalt... vil gerne have tilføjet en
order by sort

men umidlbart kan jeg ikke blot indskrive dette uden fejl, har førsøgt med
... AND gruppe = '' OR gruppe REGEXP '(^|,)%d($|,)'",$current)'order by sort');
... AND gruppe = '' OR gruppe REGEXP '(^|,)%d($|,)'",$current)"order by sort");
... AND gruppe = '' OR gruppe REGEXP '(^|,)%d($|,)'",$current) order by sort);

alle 3 muligheder med fejl... ??
Avatar billede bromer Nybegynder
12. november 2005 - 17:38 #11
Du kan smide en order by sort ind sådan her:

$get_menu_1 = sql(sprintf("SELECT * FROM menu WHERE aktiv = 1 AND parent = 0 $pubadm AND gruppe = '' OR gruppe REGEXP '(^|,)%d($|,)' ORDER BY sort",$current));
Avatar billede cyberdude Nybegynder
06. januar 2006 - 17:35 #12
takker, nu funger det perfekt... :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester