(PHP MySQL) Aantal rijen per niveau uit tabel halen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
Ik ben al uren bezig maar kom er niet uit.

Ik heb een tabel met daarin verschillende niveau's, nu wil ik een query draaien waarmee ik eruit kan halen hoeveel items per niveau in tabel aanwezig zijn. De tabel ziet er als volgt uit (een uitgeklede versie, maar het gaat om het idee).

De gedachte is dat de op basis van het aantal items wordt bepaald of er wel of niet een submenu wordt geopend in het pull-down menu. Dus als er maar 1 item is met 1.01 dan wordt er geen submenu weergeven.

Afbeeldingslocatie: http://img221.imageshack.us/img221/9369/voorbeeldxn6.jpg

De output moet dus aangeven dat er in dit geval per niveau 3 items zijn.

Nu ben ik wel bezig geweest met mysql_numrow echter geeft dat alleen maar een resultaat van de hele tabel en niet per niveau.

De concrete vraag is dus hoe kan ik er per niveau het aantal item eruit halen?

Pura Vida


Acties:
  • 0 Henk 'm!

  • Nic
  • Registratie: April 2005
  • Laatst online: 11:10

Nic

Vrij

Zoek maar eens naar 'count(*)' en 'group by'. :)

Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
dsltv schreef op zaterdag 16 februari 2008 @ 18:48:
Zoek maar eens naar 'count(*)' en 'group by'. :)
Ja count is inderdaad een optie.. maar dan wil je group by doen op het niveau... dat gaat toch niet goedkomen?

Pura Vida


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Waarom niet?

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
Wat ik nu doe is:

$xx2 = mysql_query("SELECT niveau,COUNT(*) FROM pagina GROUP BY niveau");

Alleen nu moet ik dus een output creëren, echter kan ik dat niet echt vormgeven.
Hij moet per niveau kijken of er meer dan 1 item is. Klinkt misschien wat dom maar kom er niet uit.

Pura Vida


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 17:19
Als je nog een extra voorwaarde wil hebben, moet je waarschijnlijk aan de slag met HAVING. :)

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 23-08 23:43
Zou dit werken?
SQL:
1
SELECT MIN(Aantal) FROM (SELECT Count(*) AS Aantal FROM pagina GROUP BY niveau


PS: het werkt.

[ Voor 7% gewijzigd door Bolukan op 16-02-2008 20:23 ]


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
Bolukan schreef op zaterdag 16 februari 2008 @ 20:18:
Zou dit werken?
SQL:
1
SELECT MIN(Aantal) FROM (SELECT Count(*) AS Aantal FROM pagina GROUP BY niveau


PS: het werkt.
Wat ik als output wil genereren is:

3 auto's
3 fiets
3 boot

Stel dat er maar 1 boot is dan wil ik op basis daarvan een ' if ' statement doen zodat bij die waarde geen submenu komt.

Als ik doe wat jij hierboven aangeeft dan creëer je toch alleen de minimale value's?

Pura Vida


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 17:19
Wat is probleem dan precies, want volgens mij is je probleem al redelijk behapbaar. die MIN(Aantal) weglaten en je bent er zo'n beetje, dan kun je in PHP code je menu opbouwen, toch?

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
misschien snap ik het neit ... maar hij moet per niveau kijken of hoeveel items er zijn.

Dus het ene niveau heeft 10 subitems en het andere 1 en de volgende bijv. weer 5.
Moet ik dan met een WHILE laten kijken per niveau hoeveel subitems er zijn?

[ Voor 18% gewijzigd door Maverick2001 op 16-02-2008 21:23 ]

Pura Vida


Acties:
  • 0 Henk 'm!

Verwijderd

Bolukan schreef op zaterdag 16 februari 2008 @ 20:18:
Zou dit werken?
SQL:
1
SELECT MIN(Aantal) FROM (SELECT Count(*) AS Aantal FROM pagina GROUP BY niveau


PS: het werkt.
Inderdaad: het werkt... alleen was dat de vraag niet ;)
Maverick2001 schreef op zaterdag 16 februari 2008 @ 20:10:
Wat ik nu doe is:

$xx2 = mysql_query("SELECT niveau,COUNT(*) FROM pagina GROUP BY niveau");

Alleen nu moet ik dus een output creëren, echter kan ik dat niet echt vormgeven.
Hij moet per niveau kijken of er meer dan 1 item is. Klinkt misschien wat dom maar kom er niet uit.
Is perfect.
Hoe je de output nu gaat regelen?
Wat bedoel je?
Je resultaat zit nu in $xx2... Als je wilt kijken of het veld groter is dan 1 kan je een "if" gebruiken...??? of ben ik dan te basic.

Acties:
  • 0 Henk 'm!

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 19-09 21:35

Maverick2001

Never look back

Topicstarter
Je bent niet te basic maar ik zit wel ff ermee dat hij natuurlijk die xx2 voor elk niveau moet doen.. en daar kom ik even niet uit...

Pura Vida


Acties:
  • 0 Henk 'm!

  • Fiander
  • Registratie: Februari 2001
  • Laatst online: 28-05 12:35
Het probleem zit em er in dat je voor een type groep meerdere titels hebt.
dus fiets, fiets2 en fiets3
hierdoor 'verpest' het de group by een beetje.
kun je niet een extra kollom opnemen met daarin het type onderwerp?
dus fiets, fiets, fiets.

als je dit doet, kun je hem opnemen in je query zonder dat je je group by omzeep help.

Deze sig is een manueel virus!! Als je dit leest heb je het. Mail dit bericht naar iedereen die je kent, en verwijder alle bestanden van je computer.


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 17:19
Kun je niet gewoon alle items ophalen met hun niveau en dan in PHP een array opbouwen met de niveaus als key en als value een array met al die items. Dan kun je die array gebruiken om je menu op te bouwen.

Voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Array
(
    [1.01] => Array
        (
            [0] => FIETS
            [1] => FIETS2
            [2] => FIETS3
        )

    [1.02] => Array
        (
            [0] => AUTO
            [1] => AUTO2
            [2] => AUTO3
        )

    [1.03] => Array
        (
            [0] => BOOT
            [1] => BOOT2
            [2] => BOOT3
        )

)

[ Voor 50% gewijzigd door Jaap-Jan op 16-02-2008 21:59 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

Verwijderd

Een andere mogelijkheden zijn:

1 verander niveau in fiets, auto en boot ipv 1.01

2 maak een andere tabel met

Niveau Enkelvoud meervoud
1.01 Fiets Fietsen
1.02 Auto Auto's
1.03 Boot Boten
Gebruik het aantal om te bepalen of het enkelvoud of meervoud moet zijn

Acties:
  • 0 Henk 'm!

Verwijderd

Het eenvoudigste is :
Het aantal per niveau ophalen.
Dit bewaren en dan pas per nivea het aantal en de omschrijving (E/M) en eventueel een puldown (afhankelijk van het aantal)

Dit is het klassieke voorbeeld van een drielagen structuur.
1 Ophalen gegevens
2 Opslaan in een tabelvorm (met bewerkingen)
3 Presenteren


Ophalen
1.01 3
1.02 1
1.03 2

bewerken
3 Fietsen
1 Auto
2 Boten

Presenteren
3 Fietsen (+pulldown)
1 Auto
2 Boten (+pulldown)

[ Voor 18% gewijzigd door Verwijderd op 16-02-2008 22:36 ]

Pagina: 1