[PHP] Planningsschema

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
beste mensen,

Ik ben aan het scripten om een plannings schema te maken dat wil zeggen dat er planningen kunnen gemaakt worden en deze netjes in een jaar schema worden getoond.

dit is me gelukt (tabel laten printen met for lus en begin en eindatum van maand als stements).

maar nu moet ik deze module ombouwen omdat ik geen rekeningen heb gehouden met overplanningen.

nu is mijn vraag hoe kan ik in een database (dagen2006) tellen hoeveel planningen er in de maand januari zijn gemaakt (standaard script staan de velden op NULL).
Om het wat te verduidelijken staat hieronder het script voor de maand januari:
De tabel 2006 bevat 367 velden waarvan 365 overeenkomen met aantal dagen en waarvan index autoincrement is en id=de gebruiker die pland)

<? for($januari = date ("z", mktime(0, 0, 0, 1, 1, $jaar)); $januari != date ("z", mktime(0, 0, 0, 2, 1, $jaar)); $januari++)
{
$sql_query7="Select count($januari2) as aantal from dagen2006 where id=$id AND $januari IS NOT NULL";

while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{echo " <b>{$row['totaal']}</b><br>" ;}
}

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik vermoed niet alleen dat je een behoorlijk brak datamodel hebt, maar ook je code klopt waarschijnlijk van geen kanten. De informatie die je geeft is heel weinig mee te doen. Kun je een iets duidelijkere omschrijving geven van je database model en de algoritmes die je probeert te gebruiken?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok sorry,

Mijn database bestaat uit 4 tabellen:

dagen2006
gebruiker
planning_nr
planning

Bij een planning wordt er een rij aangemaakt in de tabel planning_nr met daarin het id nr van de planning en de gebruiker.

In de tabel dagen2006 bij een planning een rij aangemaakt waarin bij ID het id-nr van de gebruiker wordt gezet.
Daarna wordt het aangemaakte id nr van de tabel planning_nr in de door mij geselecteerde dagen gezet (bijvoorbij 1 tm 31 als het om januari gaat).

Wat ik wil als je een gebruiker selecteert hij in het schema 2006 het aantal planningen voor de dag laat zien (getal) en deze dan in het hokje van de dag plaatst.

ik hoop dat het hiermee duidelijker is

Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 10:10

WormLord

Devver

De code die je laat zien kan inderdaad niet werken.
Hier even je code in een code-blok met een beetje re-formatting:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
for($januari = date ("z", mktime(0, 0, 0, 1, 1, $jaar)); $januari != date ("z", mktime(0, 0, 0, 2, 1, $jaar)); $januari++)
{
    $sql_query7 = "Select count($januari2) as aantal from dagen2006 where id=$id AND $januari IS NOT NULL";

    while($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        echo " <b>{$row['totaal']}</b><br>" ;
    }
}
?>

In regel 4 gebruik je de variabele $januari2 terwijl je daar volgens mij $januari bedoeld.
In regel 8 echo je de waarde van het veld 'totaal', maar dat veld zit niet in de resultset. Je haalt namelijk alleen het berekende veld 'aantal' op.
Als je 'error_reporting(E_ALL);' in het begin van je script had staan, had je dat al zelf gezien.

En dat de tabel dagen2006 een gruwel is, heb je hopelijk zelf ook al door. Hierdoor krijg je namelijk hele lelijke constructies om informatie op te halen. Een tabel met 1 record per dag zou al een heel stuk beter zijn.
Bv. tabel dagen met velden (id, jaar, user_id, dag_nummer, planning_id)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
inderdaad ik heb $januari2 gebruikt omdat ik met $januari 0 krijgt terwijl de database 1 tm 365 bevat

$januar12 is dan ook $janurari+$een;

maar als ik nu de tabel dagen2006 wel hou kan ik dan wel tellen hoeveel planningen er voor de dag $januari2 staan (sql query?) geselecteerd op gebruiker (dus id).?

btw het is idd niet de mooiste manier, maar het was de eerste manier die mij te binnen schoot.....ik hoop dat er een manier is anders moet ik heel veel ombouwen.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Sorry maar je werkt jezelf zo echt compleet vast. Ik zou er voor kiezen om een tabel te maken waarin je alle evenementen met een start en eindtijd. Die tabel met 365 kolommen is echt niet handig, sowieso niet omdat je dan sommige dingen meerdere keren er in moet zetten..

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

* NMe is met djluc. Ik heb recent nog iets soortgelijks gemaakt, niet zozeer een planning, als wel een tijdsverantwoording. Ik heb dat ook op die manier opgelost; gewoon in de tabel waarin de data opgeslagen wordt een begin- en een eindtijd zetten, en daarna vanuit PHP bij het weergeven kijken welke data daartussen liggen. De manier die je nu gebruikt is erg omslachtig en lastig onderhoudbaar, aangezien je gewoon voor elk jaar een nieuwe tabel moet gaan gebruiken.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 10:10

WormLord

Devver

Wat je wil is mogelijk. Je krijgt dan een query als
SQL:
1
2
3
4
5
SELECT count(`veld1`) AS aantal1
     , count(`veld2`) AS aantal2
     , ...
  FROM table
 WHERE id = $id

Null-values worden automatische overslagen door de count-functie, dus die hoef je niet via de where-clause eruit te filteren.

Maar het is zeer waarschijnlijk de moeite waard om je datamodel aan te passen, zoals ook al djluc en -NME- is aangegeven.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
tnx voor al jullie reacties....btw mooi tijdslijntje! ;)

ik heb het probleem kunnen fixen.

Het had te maken met het feit dat ik zocht op kolommen in plaats van op velden.

Ik had inderdaad een andere werkwijze moeten aannemen en neem deze kennis mee naar het volgende project.

ik zit helaas nu in een stadium dat ik niet alles nog eens kan omgooien.

maar iig iedereen bedankt!

Pim
Pagina: 1