Avatar billede haolan Nybegynder
12. maj 2006 - 16:27 Der er 15 kommentarer og
1 løsning

tæl ikke med i et helt tidsrum

Hej eksperter..
Titlen var lidt svær at definere, men håber den er god nok :)

Jeg skal have lavet en oversigt over nogle tider mine brugere bedst muligt kan komme online på siden.

Når en bruger udvælger sine tider kan vedkomne vælge 2 tider på dagen, der passer bedst. Tiderne er helt fri i timer og minutter..

Lad os antage at en bruger har valgt at kunne komme online fra 19:00 til 23:30

Oversigten har jeg stillet op således:
http://klan.vivaa.dk/screenshot.JPG

Så min stamme skal altså blive talt med som om han godt kan komme fra 19 til 20, fra 20 til 21, fra 21 til 22.  Men i tidsrummet fra 23 til 24 skal han altså kun tælles med, som om han kun kan komme noget af tiden.

Det samme gælder hvis nu brugeren har valgt at han først komme kl. 19:30, skal han i tidsrummet fra 19 til 20 og tælles med som kommer noget af tiden.

i Oversigten adskilles de to tællere med /  i formen:  Kan hele tiden/Kan noget af tiden.

Håber i kan hjælpe mig med at få de rigtige mysql kald frem.. Jeg har ihvertfald mine problemer..
Avatar billede jakobdo Ekspert
12. maj 2006 - 17:26 #1
Hvad version af MYSQL bruger du?
SELECT VERSION();
Avatar billede haolan Nybegynder
12. maj 2006 - 19:22 #2
4.1.11-Debian_4sarge2
Avatar billede jakobdo Ekspert
13. maj 2006 - 09:10 #3
Skal du blot i din oversigt kunne se om tiden er taget af en bruger eller ej?
Avatar billede haolan Nybegynder
13. maj 2006 - 13:49 #4
den skal tælle hvor mange brugere der kan komme online i det tidsrum der står skrevet i venstre side af tabellen.. Og hvor mange brugere der kun kan noget af tidsrummet.
Avatar billede jakobdo Ekspert
13. maj 2006 - 15:42 #5
Prøv at kig på sql'en funktionen: http://www.w3schools.com/sql/sql_between.asp
Så kan du lave et udtræk hvor du tester:

SELECT * FROM table WHERE start BETWEEN 12:00 AND 13:00
Avatar billede haolan Nybegynder
13. maj 2006 - 17:12 #6
hmm er ikke sikker på den vil virke..

Altså strukturen på min tabel ser sådan ud:
CREATE TABLE `hk_bestraid` (
  `id` int(11) NOT NULL auto_increment,
  `stamme` tinytext NOT NULL,
  `klanid` int(11) NOT NULL default '0',
  `day` tinyint(4) NOT NULL default '0',
  `from_1` tinytext NOT NULL,
  `to_1` tinytext NOT NULL,
  `from_2` tinytext NOT NULL,
  `to_2` tinytext NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

Det vi skal koncentrere os om her er from_1, to_1 og from_2, to_2.
På denne måde kan brugeren altså vælge 2 tider på en dag de kan komme på fra og til.

Og derfor hvis en bruger nu har skrevet at han kan være online fra 12 til 15 skal der i tidsrummene fra 12 til 13 og 14 til 15 blive talt 1.

og hvis brugeren nu har skrevet at han kan være online fra 12:30 til 14:00 betyder det jo at han kan være online i hele tidsrummet fra 13 til 14, men kun noget af tidsrummet mellem 12:30 og 13. Derfor skal han kun tælles som helt online i tidsrummet fra 13 til 14 og som kun lidt online i tidrummet fra 12 til 13..

Håber jeg har gjort mig forståelig :) det er lidt svært at forklare..
Avatar billede jakobdo Ekspert
14. maj 2006 - 18:49 #7
Jeg tror godt jeg forstår hvad du vil, men jeg tror du må prøve at lave noget kode, og så lad os tage det punkt for punkt.
Avatar billede haolan Nybegynder
14. maj 2006 - 23:43 #8
nok en god idé.. jeg prøver at fuske noget sammen imorgen hvis jeg kan nå det...
Avatar billede haolan Nybegynder
15. maj 2006 - 19:19 #9
har stillet det op sådan her:

echo "Aflæses som: Kan hele tiden/Kan kun noget af tiden";
echo "<table class='list'>";
echo "<tr><td></td><td>Mandag</td><td>Tirsdag</td><td>Onsdag</td><td>Torsdag</td><td>Fredag</td><td>Lørdag</td><td>Søndag</td></tr>";

for($i > $start; $i < 24; $i++) {
    $from1 = mktime($i,00);
    $i2 = $i+3600;
    $to1 = mktime($i2,00);
    if($i < 10) {
        $time = "0$i:00";
    } else {
        $time = $i.":00";
    }
    if($i+1 < 10) {
        $totime = $i+1;
        $to = "0$totime:00";
    } else {
        $totime = $i+1;
        $to = "$totime:00";
    }
   
    echo "<tr $bgcolor><td>";
    echo "Kl.".$time."<br />".$to;
    echo "</td><td>";
    $count1 = mysql_query("SELECT COUNT(*) FROM hk_bestraid WHERE day = '1' AND $from1 >= from_1 AND $to1 <= to_1");
    $count1 = mysql_result($count1,0);
   
    $count2 = mysql_query("SELECT COUNT(*) FROM hk_bestraid WHERE day = '1' AND $from1 >= from_1 AND $to1 <= to_1");
    $count2 = mysql_result($count2,0);
   
    $count3 = mysql_query("SELECT COUNT(*) FROM hk_bestraid WHERE day = '1' AND $from1 <= from_1 AND $to1 >= to_1");
    $count3 = mysql_result($count3,0);
   
    $count4 = mysql_query("SELECT COUNT(*) FROM hk_bestraid WHERE day = '1' AND $from1 <= from_1 AND $to1 <= to_1");
    $count4 = mysql_result($count4,0);
   
    $count5 = $count2+$count3+$count4;
   
    echo $count1."/".$count3;
    echo "</td><td>";
   
    echo "</td><td>";

    echo "</td><td>";
   
    echo "</td><td>";

    echo "</td><td>";
   
    echo "</td><td>";
   
    echo "</td></tr>";
}

echo "</table>";

Men den tæller ingenting på den måde...
Avatar billede haolan Nybegynder
15. maj 2006 - 19:26 #10
$count3 skulle være $count5 der hvor jeg udskriver dem..
Avatar billede jakobdo Ekspert
15. maj 2006 - 21:56 #11
Har du ikke en side hvor jeg kan se output?
Og så smid evt:

echo "<hr>";
show_source(__FILE__);
I bunden, så kan jeg samtidig se source-koden. (så husk evt at læg login til mysql i anden fil)
Avatar billede haolan Nybegynder
18. maj 2006 - 13:45 #12
http://klan.vivaa.dk/inc/raidtimes.php <-- filen hvor resultater skrives
http://klan.vivaa.dk/inc/confbestraid.php <-- filen hvor tiderne defineres
Avatar billede jakobdo Ekspert
19. maj 2006 - 17:48 #13
Prøv at fang mig på msn: jakobdo (indsæt @ her) hotmail (ind . her) com
Avatar billede haolan Nybegynder
19. maj 2006 - 20:00 #14
Til jer andre derude...
Jacobdo og jeg fandt løsningen via MSN..

Løsningen blev til at vi lavede strukturen i databasen om til TIME istedet for at bruge timestamps. Og så kunne vi lave følgene kald for at finde de bruger der kunne være online i hele tidsrummet:
"SELECT COUNT(id) AS antal FROM hk_bestraid WHERE day = '1' AND from_1 <= '$from1' AND to_1 >= '$to1'"

og denne for de brugere der kun kunne noget af tiden:
"SELECT COUNT(id) AS antal FROM hk_bestraid WHERE day = '1' AND (from_1 > '$from1' AND from_1 < '$to1') OR day = '1' AND (to_1 > '$from1' AND to_1 < '$to1')"

Læg svar for points jacobdo :) Og mange tak for hjælpen
Avatar billede jakobdo Ekspert
19. maj 2006 - 20:00 #15
Svar!
Avatar billede jakobdo Ekspert
19. maj 2006 - 20:43 #16
Takker for point.
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