Avatar billede htx98i17 Professor
29. juli 2011 - 10:29 Der er 18 kommentarer og
2 løsninger

Tjek tallet

Jeg har en gruppestruktur der ligner:

100,0 = 1. niveau (hovedgruppe)
110,0 = 2. niveau (undergruppe)
110,1 = 3. niveau (under undergrupper)

De ligger i database og jeg har tænkt mig at hente dem alle i ét træk.

Så jeg søger en måde i PHP at få grupperne delt op når jeg køre udtrækket igennem løkken?
Avatar billede htx98i17 Professor
29. juli 2011 - 10:30 #1
Hovedgruppe kan forøvrigt også være i tusinde.
Avatar billede majbom Novice
29. juli 2011 - 12:14 #2
111 kan ikke forekomme?
Avatar billede htx98i17 Professor
29. juli 2011 - 12:19 #3
Jo :)

eksempelvis

1683,3

Hovedgruppen er 1600
Undergruppen er 83
Under undergruppen er 3

Håber jeg fik forklaret ordentligt nu, ellers spørg :)
Avatar billede htx98i17 Professor
29. juli 2011 - 14:11 #4
Et eksempel på gruppe strukturen som jeg har brug for hjælp til hvordan jeg får PHP til at tolke:

Niveau    Gruppe
1.            100 (Cykler)
2.                 101 (Børn)
3.                     101,1 (Dreng)
3.                     101,2 (Pige)
2.                 102 (Voksen)
3.                     102,1 (Herre)
3.                     102,2 (Dame)

1.            1200 (Tøj)
2.                 1225 (Børn)
3.                     1225,1 (Dreng)
3.                     1225,2 (Pige)
2.                 1225 (Voksen)
3.                     1225,1 (Herre)
3.                     1225,2 (Dame)
Avatar billede majbom Novice
29. juli 2011 - 14:25 #5
1225 (Børn)
3.                    1225,1 (Dreng)
3.                    1225,2 (Pige)
2.                1225 (Voksen)
3.                    1225,1 (Herre)
3.                    1225,2 (Dame)

er det korrekt, at der er 2x 1225,1 og 1225,2, eller er det en typo?
Avatar billede htx98i17 Professor
29. juli 2011 - 14:35 #6
Sorry, sådan her

Niveau    Gruppe
1.            100 (Cykler)
2.                101 (Børn)
3.                    101,1 (Dreng)
3.                    101,2 (Pige)
2.                102 (Voksen)
3.                    102,1 (Herre)
3.                    102,2 (Dame)

1.            1200 (Tøj)
2.                1225 (Børn)
3.                    1225,1 (Dreng)
3.                    1225,2 (Pige)
2.                1226 (Voksen)
3.                    1226,1 (Herre)
3.                    1226,2 (Dame)
Avatar billede olebole Juniormester
29. juli 2011 - 16:38 #7
<ole>

Det har du vist ikke fået gjort særlig nemt for dig selv. Det ser ud til, at du har brugt strenge som værdier. Det ville dog nok være lettere at fylde op med 0'er, så der altid er samme antal pladser før og efter kommaet. Så ville du kunne i hvertfald meget lettere kunne tjekke med RegExp

/mvh
</bole>
Avatar billede htx98i17 Professor
29. juli 2011 - 17:01 #8
Det kan stadig nå at laves om. Kan du vejlede mig lidt i hvordan databasefelter skal se ud og hvordan jeg får siden til at tolke strukturen?
Avatar billede cronaldo Nybegynder
30. juli 2011 - 00:32 #9
Jeg undrer mig over hvorfor du bygger det op sådan - jeg ville have lavet det som en tabel hvor man havde flg.:


id
name
category_id


Hvis category_id = 0 så er det en parent. Hvis det er X er det child til den category der har id = X.. Så kan du loop ved at lave en funktioner og lave multidimensional array eller hvordan du ønsker at gøre det :-)
Avatar billede htx98i17 Professor
30. juli 2011 - 08:53 #10
jeg tror grunden til det blev lavet sådan, for mange år siden, er at de ville definere rækkefælgen af grupperne/undergrupperne.
Men vil man kunne det på din måde?
Avatar billede olsensweb.dk Ekspert
30. juli 2011 - 11:17 #11
#9
id, name, category_id er vi her ikke her begrænset af at under+underunder emne tidsammen kun må værer 99, det kan dog nemt løses ved at lave et felt merer feks nr, så kan der værer 99 underemner, og lige sås mange underunder emner som der er plads til i datatypen
så db vil se sådan ud "id, name, nr, category_id"

min første overvejelse 5 tabeller

CREATE TABLE IF NOT EXISTS `main_group`(`id` int(11) NOT NULL AUTO_INCREMENT, `name` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `subgroup`(`id` int(11) NOT NULL AUTO_INCREMENT, `name` text NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `sub_sub_group`(`id` int(11) NOT NULL AUTO_INCREMENT,`name` text NOT NULL, PRIMARY KEY (`id`) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `s_main_sub`(`id` int(11) NOT NULL AUTO_INCREMENT,`main_group_id` int(11) NOT NULL,`sub_group_id` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `s_sub_subsub`(`id` int(11) NOT NULL AUTO_INCREMENT,`sub_group_id` int(11) NOT NULL,`subsub_group_id` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


men jeg vil lige eftertænke dit forslag med kun 1 tabel, og se om man kan gøre det på din måde

#10
jeg tror grunden til det blev lavet sådan, for mange år siden, er at de ville definere rækkefælgen af grupperne/undergrupperne.
det er vel inspiraret af et biblioteks system, og deres måde at opdele bøger
hoved emne, underemne, fortløbende nummer

jeg får står næsten ikke du vil lade dit hoved emne ende med 00, (jeg ved godt) du bare ligger numrene fra hovedemne og underemne sammen sådan
<?php   
    $a = 1200;
    $b = 25;
    $c = $a+$b;
    echo $c; // udskriver  1225
?>


men du kan jo lige så godt ligge dem sammen som stringe
<?php
    $a = 12;
    $b = 25;
    $c = $a.$b;
    echo $c; // udskriver  1225
?>
Avatar billede htx98i17 Professor
30. juli 2011 - 11:29 #12
Tak for svar.

Jeg er ved at lave én tabel til strukturen:
ID
LABEL (gruppenavnet)
RELATION (0 for hovedgruppe eller et gruppeid)

Så skal jeg så have fundet ud af hvordan jeg får PHP til at lave strukturen på siden og hvordan man manuelt skal kunne vælge sortering.

Forslag er meget velkomne. Det bliver således een forespørgsel til DB umiddelbart, hvor der i løkken skal undersøges hvilket niveau gruppen er på...
Avatar billede olebole Juniormester
30. juli 2011 - 14:44 #13
Der er flere måder at løse denne problematik på - og de er nok alle bedre end udgangspunktet.

cronaldo's forslag i #9 er en meget almindelig måde at oprette kategorier og emner på i én og samme tabel. Den ses f.eks. meget ofte anvendt i forbindelse med menustrukturer. Det kan være en udmærket løsning - og der er ikke nogen begrænsning på 99.

I mange tilfælde vil det dog være at foretrække at lægge data ud i relaterede tabeller. Det vil ofte kunne øge fleksibiliteten og skabe bedre overblik. Det må komme anpå et større perspektiv.

Det, at en stringoperator uheldigvis kan anvendes på tal - og oven i købet til konkatenering af tal - er dog ikke noget, jeg vil anbefale at benytte sig af. Det må i bedste fald betragtes som en uhensigtsmæssighed, og man må håbe/forvente, det bliver rettet i en kommende version.
Avatar billede htx98i17 Professor
30. juli 2011 - 14:49 #14
Jeg har gjort det nu, at jeg har lavet en løkke (niveau 1), i en løkke (niveau 2), i en løkke (niveau 3).
Avatar billede htx98i17 Professor
07. august 2011 - 16:37 #15
Jeg vil gerne uddele point for jeres deltagelse. Tak for hjælpen.
Avatar billede majbom Novice
07. august 2011 - 17:35 #16
jeg springer over :)
Avatar billede olebole Juniormester
07. august 2011 - 18:07 #17
me too  =)
Avatar billede olsensweb.dk Ekspert
07. august 2011 - 20:51 #18
me too  =)
Avatar billede htx98i17 Professor
07. august 2011 - 21:00 #19
Tak for deltagelsen
Avatar billede htx98i17 Professor
07. august 2011 - 21:00 #20
Tak for deltagelsen
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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