[PHP] Getallen optellen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • devilbird
  • Registratie: November 2004
  • Laatst online: 17-01-2024
Ik heb een database met daari categorie ID's. Die hebben een variablele lengte zoals 001 of 001002 maar als ik daar 1 bij optel maakt php er 2 van of 1003 maar ik wil die nullen behouden.

Ik heb al wat rond gezocht. Heb alleen niks wat ik kon gebruiken gevonden. Misschien zoek ik niet goed. Kan iemand me hiermee helpen?

<--- http://www.lansensations.nl --->


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Misschien kan je hier even kijken?
http://nl.php.net/manual/en/function.sprintf.php en dan het gedeelte over zero padded ints

Maar waarom sla je getallen in dit formaat op? het is niet echt een logisch formaat voor integers.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • devilbird
  • Registratie: November 2004
  • Laatst online: 17-01-2024
Dat is omdat ik werk met nivo's in mijn categorien. Voor elke level dieper komen er 3 getallen achter. Dus eerst heb je 001 een categorie daaronder is dan 001001 en een categorie daar weer onder wordt 001001001 enz.

En ik zal eens kijken wat ik allemaal kan met die pagina :)

<--- http://www.lansensations.nl --->


Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Voor het optellen opslaan hoelang de string is, vervolgens optellen en dan nullen toevoegen totdat je weer de oude lengte hebt.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • devilbird
  • Registratie: November 2004
  • Laatst online: 17-01-2024
Kaassoevlee schreef op dinsdag 11 januari 2005 @ 12:06:
Voor het optellen opslaan hoelang de string is, vervolgens optellen en dan nullen toevoegen totdat je weer de oude lengte hebt.
Dat is inderdaad wel een goed idee, zoiets had ik voor de hoofdcategorie wel maar had geen idee hoe ik het zou moeten doen met de sub categorieen.

Allebei in iedergeval bedankt voor de hulp :)

<--- http://www.lansensations.nl --->


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
mysql kent ook de LPAD() functie

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Toch is de methode voor je niveau's wel een slecht db-model lijkt me. Kan dat niet beter genormaliseerd worden? Hier ga je waarschijnlijk nog wel vaker mee in de problemen komen lijkt me.

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Maak het veld ZEROFILL.

Maar als ik jou was zou ik even kijken naar binaire operators, stukje nuttiger. Sla je gewoon de integer 19 op, dit staat dan voor 10011. MyQL kent gewoon binary operators, dus je kunt dingen als 19 & 13 doen. Dit is dan 10011 & 01101 = 00001 = 1.

Best makkelijk. (Gebruik het zelf ook af en toe, verwerking ervan vindt ik toch net wat handiger als de ingebouwde sets van MySQL.)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Zoefff
  • Registratie: September 2001
  • Laatst online: 21-09 12:37

Zoefff

❤ 

Een google op http://www.google.nl/sear...hp&btnG=Google+zoeken&lr= levert mij

PHP:
1
2
    $number = 1;
    printf("%03d", $number);

op.

1 word dus 001.

Je moet alleen het aantal getallen (nu drie) veranderen, want bij 1003 moeten het er dus 6 zijn (001003). Dat kan je vast wel met strlen() doen ;)


FotoblogWerkaandemuur.nlMoestuincursus.nlTwitter


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

devilbird schreef op dinsdag 11 januari 2005 @ 12:05:
Dat is omdat ik werk met nivo's in mijn categorien. Voor elke level dieper komen er 3 getallen achter. Dus eerst heb je 001 een categorie daaronder is dan 001001 en een categorie daar weer onder wordt 001001001 enz.

En ik zal eens kijken wat ik allemaal kan met die pagina :)
Hmm sorry dat ik zeg, maar mijn nekharen gaan een beetje rechtopstaan als ik zo iets hoor....

Misschien een leuk stukje lezen over normalisatie van databases?
http://www.sum-it.nl/cursus/dbdesign/hollands/logis010.php3 deze is wel leuk om je op weg te helpen.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • devilbird
  • Registratie: November 2004
  • Laatst online: 17-01-2024
Zoefff schreef op dinsdag 11 januari 2005 @ 12:39:
Een google op http://www.google.nl/sear...hp&btnG=Google+zoeken&lr= levert mij

PHP:
1
2
    $number = 1;
    printf("%03d", $number);

op.

1 word dus 001.

Je moet alleen het aantal getallen (nu drie) veranderen, want bij 1003 moeten het er dus 6 zijn (001003). Dat kan je vast wel met strlen() doen ;)
Is inderdaad wel een makkelijke manier om de nullen er weer voor te zetten.

<--- http://www.lansensations.nl --->


Acties:
  • 0 Henk 'm!

  • devilbird
  • Registratie: November 2004
  • Laatst online: 17-01-2024
LuCarD schreef op dinsdag 11 januari 2005 @ 13:03:
[...]


Hmm sorry dat ik zeg, maar mijn nekharen gaan een beetje rechtopstaan als ik zo iets hoor....

Misschien een leuk stukje lezen over normalisatie van databases?
http://www.sum-it.nl/cursus/dbdesign/hollands/logis010.php3 deze is wel leuk om je op weg te helpen.
Ik zou zeggen geef zelf eens een voorbeeld om een boomstuctuur te maken met 1 tabel waarin je een onbekend aantal dieptes wil maken.

Ik ben nog maar een beginner met php dus info is altijd welkom. Maar voor zover ik nu weet is dit de makkelijkste manier.

<--- http://www.lansensations.nl --->


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

devilbird schreef op dinsdag 11 januari 2005 @ 13:12:
[...]

Ik zou zeggen geef zelf eens een voorbeeld om een boomstuctuur te maken met 1 tabel waarin je een onbekend aantal dieptes wil maken.

Ik ben nog maar een beginner met php dus info is altijd welkom. Maar voor zover ik nu weet is dit de makkelijkste manier.
Ik zou zeggen: gebruik de search eens. Er zijn al behoorlijk wat topics voorbij gekomen om een boomstructuur in PHP weer te geven i.c.m. de opslag daarvan in een DB.

Daarnaast als je je ID als een string opslaat dan blijven ook je voorloop nullen behouden. Met de tips die je nu hebt gekregen moet dat ook wel lukken. Overigens raad ik je dit af :)

[ Voor 16% gewijzigd door Creepy op 11-01-2005 13:23 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 18-09 13:37

sopsop

[v] [;,,;] [v]

devilbird schreef op dinsdag 11 januari 2005 @ 13:12:
[...]

Ik zou zeggen geef zelf eens een voorbeeld om een boomstuctuur te maken met 1 tabel waarin je een onbekend aantal dieptes wil maken.

Ik ben nog maar een beginner met php dus info is altijd welkom. Maar voor zover ik nu weet is dit de makkelijkste manier.
Twee tabellen maken.
code:
1
2
3
4
5
6
7
8
9
Table Tree
   treeid
   ItemId
   ParentTreeId

Table Items
   ItemId
   naam
   etc

Werkt perfect.
Indien ParentTreeId de waarde 0 heeft, is het bijbehorende ItemId een stamitem. Bij deze methode kun je een veel diepere boom maken. Jij loopt al relatief snel aan tegen de maximale grootte van je veld.

Voordeel van deze methode is dat je een item op meerdere plaatsen in de boom kunt gebruiken, zonder het item opnieuw aan te maken.

edit= Je opmerking over 1 tabel heb ik buiten beschouwing gelaten. Ik zie niet in waarom je je zou beperken.

[ Voor 15% gewijzigd door sopsop op 11-01-2005 13:36 ]


Acties:
  • 0 Henk 'm!

  • PhoeniX-
  • Registratie: Juni 2000
  • Laatst online: 01-09 10:26
devilbird schreef op dinsdag 11 januari 2005 @ 13:12:
Ik zou zeggen geef zelf eens een voorbeeld om een boomstuctuur te maken met 1 tabel waarin je een onbekend aantal dieptes wil maken.

Ik ben nog maar een beginner met php dus info is altijd welkom. Maar voor zover ik nu weet is dit de makkelijkste manier.
Het kan inderdaad zoals boppert zegt, maar ik denk dat het ook prima in 1 tabel kan:
SQL:
1
2
3
4
5
6
CREATE TABLE `category` (
  `id` smallint(6) NOT NULL auto_increment,
  `name` varchar(100) NOT NULL default '',
  `parent_id` smallint(6) NOT NULL default '0',
  PRIMARY KEY  (`id`)
)


Dit kan je dus oneindig diep maken. Met een recursieve functie kan je de hele bende weer uitlezen, bijvoorbeeld:
PHP:
1
2
3
4
5
function listCategories($parent_id=0) {
    if (hasChildren($current_category_id)) {
        listCategories($current_category_id)
    }
}

Ik denk dat dit het idee wel aardig illustreert?

(note: dit zijn versimpelde stukjes code uit m'n eigen systeem om het principe duidelijk te maken)

Acties:
  • 0 Henk 'm!

  • Zoefff
  • Registratie: September 2001
  • Laatst online: 21-09 12:37

Zoefff

❤ 

devilbird schreef op dinsdag 11 januari 2005 @ 13:12:
[...]

Ik zou zeggen geef zelf eens een voorbeeld om een boomstuctuur te maken met 1 tabel waarin je een onbekend aantal dieptes wil maken.

Ik ben nog maar een beginner met php dus info is altijd welkom. Maar voor zover ik nu weet is dit de makkelijkste manier.
Dat lijkt me relatief simpel eigenlijk?

Geef gewoon ieder item een uniek itemID mee, en een parentID.

code:
1
2
3
4
5
6
7
8
9
10
ID 1 ParentID 0
   ID 2 ParentID 1
   ID 3 ParentID 1
      ID 4 ParentID 3
   ID 5 ParentID 1
   ID 6 ParentID 1
      ID 7 ParentID 6
         ID 8 ParentID 7
ID 9 ParentID 0
   ID 10 ParentID 9

Zo kan je imho oneindig doorgaan toch? En ook zo diep als je maar zelf wilt :)


FotoblogWerkaandemuur.nlMoestuincursus.nlTwitter


Acties:
  • 0 Henk 'm!

  • devilbird
  • Registratie: November 2004
  • Laatst online: 17-01-2024
Ok, dat is inderdaad heel simpel als je het zo bekijkt :)
En zelfs met 1 table

Reactie @ boppert: Het hoefde niet speciaal in 1 tabel aangezien ik de server volledig onder controle heb ;)

Maar ik ga nu maar eens kijken wat ik het makkelijkst vind om uit te voeren. In iedergeval bedankt voor alle verhelderende uitleg allemaal _/-\o_

<--- http://www.lansensations.nl --->


Acties:
  • 0 Henk 'm!

  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Misschien wil je wel gebruik maken van een iets minder makkelijke oplossing ;)
Zoek is rond op sql & nested sets http://www.dbazine.com/tropashko4.shtml

Relationele databases zijn niet echt bedoeld om dit soort structuren op te slaan, om dit probleem alsnog een beetje netjes te tackelen is het principe van nested sets uitgewerkt.
Wanneer je met mysql werkt, is het handig om te zoeken op mysql: nested sets

De meest flexibele methode is gebruik maken van 2 tabellen, de eerste tabel worden alle items in vermeld en de 2de tabel daar word de nested set in opgeslagen. Suc6 hiermee

Pascal

Pagina: 1