/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Et loop-spørgsmål. (Reager ud fra hvad der~
Fra : Janus Høi


Dato : 05-02-09 15:17

Dette er et rigtig dumt spørgsmål, som jeg helt har stirret nmig blind
på.

Meget forenklet, kan jeg fortælle, at jeg har nogle input i en
database.
Nogle har samme reference-id og skal derfor have samme løbenummer.
(Det er til en gantt-graf, og løbenummeret har noget at gøre med
positioneringen i grafen. Det skal derfor begynde med "0" og
efterfølges af fortløbende numre, for ikke at blive underligt at se
på.)

Se eventuelt en gantt-graf her:
http://www.aditus.nu/jpgraph/features_gallery.php#GanttPlots

Som det kører nu, trækker jeg godt nok det hele ud, men selvom om
opslagene i databasen har samme reference, giver den et nyt løbenummer
til hver entry.

Database-tabellen "ferieplan" kan eksempelvis indeholde:

| person_id | ferie_start | ferie_slut |
| 3 | 15-06-2009 | 27-06-2009 |
| 9 | 10-07-2009 | 24-07-2009 |
| 10 | 01-07-2009 | 08-07-2009 |
| 3 | 12-09-2009 | 26-09-2009 |


Som man kan se, har person nummer 3 tankt sig at afholde to
ferieperioder.

Nedenstående eksempel er nok lidt svært at gennemskue, når det er
trukket ud af sin helhed, men jeg har forsøgt at simplificere det, så
det er mere overskueligt.


-- Eksempel--
$position=0; // Løbenummeret begynder med 0 (det er første plads i
grafen)
$query ="SELECT person_id, ferie_start, ferie_slut FROM ferieplan
ORDER BY person_id";
$sql = mysql_query($query);
while ($raekker = mysql_fetch_array($sql))
{
extract($raekker);

// Det er her man indsætter positionen i grafen ("$position")
$activity[$person_id] = new GanttBar ($position,$person_id,
$ferie_start, $ferie_slut);

// Og så laver jeg den velkendte tilføjelse, så næste udtræk får
næste linie
$position++;
}

-- Eksempel slut--

Ovenstående virker, men desværre får person nummer 3 jo så tildelt to
positioner. Der skulle de to database-output gerne have haftn samme
positionsnummer.

Håber I kan følge mig.

Jeg tænker, at løsningen må være noget i retning af at lave en if-
sætning der omkranser

$position++;

med betydningen "Hvis næste person_id er anderledes end denne, så skal
der lægges en enkelt til '$position', ellers skal den bare køre løkken
igennem med samme værdi i '$position'.. "

Men hvordan gør man dét?
Og er det overhovedet det der skal gøres?
--
Janus

 
 
Kai Harrekilde-Peter~ (06-02-2009)
Kommentar
Fra : Kai Harrekilde-Peter~


Dato : 06-02-09 00:27

Janus Høi <newsgroup@hjerteknuser.dk> writes:

> Dette er et rigtig dumt spørgsmål, som jeg helt har stirret nmig blind
> på.
>
> Meget forenklet, kan jeg fortælle, at jeg har nogle input i en
> database.
> Nogle har samme reference-id og skal derfor have samme løbenummer.
> (Det er til en gantt-graf, og løbenummeret har noget at gøre med
> positioneringen i grafen. Det skal derfor begynde med "0" og
> efterfølges af fortløbende numre, for ikke at blive underligt at se
> på.)
>
> Se eventuelt en gantt-graf her:
> http://www.aditus.nu/jpgraph/features_gallery.php#GanttPlots
>
> Som det kører nu, trækker jeg godt nok det hele ud, men selvom om
> opslagene i databasen har samme reference, giver den et nyt løbenummer
> til hver entry.
>
> Database-tabellen "ferieplan" kan eksempelvis indeholde:
>
> | person_id | ferie_start | ferie_slut |
> | 3 | 15-06-2009 | 27-06-2009 |
> | 9 | 10-07-2009 | 24-07-2009 |
> | 10 | 01-07-2009 | 08-07-2009 |
> | 3 | 12-09-2009 | 26-09-2009 |
>
>
> Som man kan se, har person nummer 3 tankt sig at afholde to
> ferieperioder.
>
> Nedenstående eksempel er nok lidt svært at gennemskue, når det er
> trukket ud af sin helhed, men jeg har forsøgt at simplificere det, så
> det er mere overskueligt.
>
>
> -- Eksempel--
> $position=0; // Løbenummeret begynder med 0 (det er første plads i
> grafen)
> $query ="SELECT person_id, ferie_start, ferie_slut FROM ferieplan
> ORDER BY person_id";
> $sql = mysql_query($query);
> while ($raekker = mysql_fetch_array($sql))
> {
> extract($raekker);
>
> // Det er her man indsætter positionen i grafen ("$position")
> $activity[$person_id] = new GanttBar ($position,$person_id,
> $ferie_start, $ferie_slut);
>
> // Og så laver jeg den velkendte tilføjelse, så næste udtræk får
> næste linie
> $position++;
> }
>
> -- Eksempel slut--
>
> Ovenstående virker, men desværre får person nummer 3 jo så tildelt to
> positioner. Der skulle de to database-output gerne have haftn samme
> positionsnummer.
>
> Håber I kan følge mig.
>
> Jeg tænker, at løsningen må være noget i retning af at lave en if-
> sætning der omkranser
>
> $position++;
>
> med betydningen "Hvis næste person_id er anderledes end denne, så skal
> der lægges en enkelt til '$position', ellers skal den bare køre løkken
> igennem med samme værdi i '$position'.. "
>
> Men hvordan gør man dét?
> Og er det overhovedet det der skal gøres?

Du bliver nødt til at 'huske' hvilken person_id du sidst havde fat i. F.eks :

if ($prev_person_id != $person_id) {
$position++;
$prev_person_id = $person_id;
}

Du skal så huske at initialisere $prev_person_id til noget som
$person_id aldrig kan blive, f.eks -1.


Kai
--
Kai Harrekilde-Petersen <khp(at)harrekilde(dot)dk>

Janus Høi (07-02-2009)
Kommentar
Fra : Janus Høi


Dato : 07-02-09 10:50

On 6 Feb., 00:27, Kai Harrekilde-Petersen <k...@harrekilde.dk> wrote:

>
> Du bliver nødt til at 'huske' hvilken person_id du sidst havde fat i. F..eks :
>
> if ($prev_person_id != $person_id) {
>   $position++;
>   $prev_person_id = $person_id;
>
> }
>
> Du skal så huske at initialisere $prev_person_id til noget som
> $person_id aldrig kan blive, f.eks -1.
>

Tak.
Det bragte mig videre. Jeg har ikke lige fået reageret før nu, for jeg
har kæmpet med at få det til at virke.
Nu har jeg bare et underligt problem.

Jeg har lige lagt et eksempel op her:
PNG-eksempel:
http://www.yourfilehost.com/media.php?cat=image&file=gantt.png
PHP-eksempel (i .txt):
http://www.yourfilehost.com/media.php?cat=other&file=gantt.txt

Som man kan se på billedet, laver den dobbeltudtræk på det hele og
'fletter' dem.

Gantt-bar'en for Person_id nummer 45 får tildelt plads ($i) nummer 0
og nummer 1
Gantt-bar'en for Person_id nummer 46 får tildelt plads ($i) nummer 1
og nummer 2
Gantt-bar'en for Person_id nummer 47 får tildelt plads ($i) nummer 2
og nummer 3

Den skulle jo kun give en plads til hver Person_id..

Jeg kan ikke lige gennemskue hvor i løkken det går galt.


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste