mboost-dp1

Søge i MySQL vha. php ???? og udskrive rækken!


Gå til bund
Gravatar #1 - Qw_freak
17. maj 2010 14:36
Hey, jeg har en database som fungerer som et slags skoleskema, hvor man kan indtaste et starttidspunkt i hver sit felt, samt et sluttidspunkt. (og self andre data i andre felter)

mit problem er så at display'e via en webside hvilken række som er aktuel lige nu i forhold til klokkeslettet.

FX_:

Der er matematik kl 13:30:00 til 14:30:00.
Klokken er nu 14:00:00.
find den aktuelle række og udskriv den!

så stå der fx:

fag: Matematik
Lærer Martin
Start: 13:30:00
Slut: 14:30:00
Klasse: 10b

Jeg har selfølgelig googlet i vilden sky, men kan ikke finde noget der duer!


jeg er kommet frem til dette, men det virker ihvertfald ikke!!!

$time_now="'11:30:00'";
$time_query='SELECT * FROM Data WHERE Start='.$time_now;
$time_result = mysql_query($time_query);

echo mysql_result($result, 'Start').'<br/>';
Gravatar #2 - Ronson ⅍
17. maj 2010 17:38
Kan man bare sådan skrive tidspunkter ind som man lyster? Hvordan ligger dataene overhovedet i db'en?
Gravatar #3 - XorpiZ
17. maj 2010 17:41
Noget helt andet er, at din select-sætning er helt forkert.

Du spørger efter alle data, hvor start-tiden er = den indtastede tid. Altså kan du ikke indtaste f.eks. 14:00:00 og få timen, der startede kl. 13:30:00.
Gravatar #4 - Qw_freak
17. maj 2010 17:59
Ronson (2) skrev:
Kan man bare sådan skrive tidspunkter ind som man lyster? Hvordan ligger dataene overhovedet i db'en?


jeg vil tro man på en måde vedhjælp af en 'for'-løkke kan prøve sin vej igennem databasen! men jeg er ikke sikker på det er særligt holdbart når databsen vokser sig størrere!

dataene ligger på hver sin plads i rækken, altså en 'column' for start-tid slut-tid, bruger, klasse osv.

XorpiZ (3) skrev:
Noget helt andet er, at din select-sætning er helt forkert.

Du spørger efter alle data, hvor start-tiden er = den indtastede tid. Altså kan du ikke indtaste f.eks. 14:00:00 og få timen, der startede kl. 13:30:00.


Det er netop det der 'bugger' mig! det og så det at jeg ikke engang kan få den til at udskrive rækken selv når jeg søger på det eksakte nummer!
Gravatar #5 - D_V
17. maj 2010 18:07
er det ikke bare en

SELECT * FROM `data` WHERE `end_time` > $timenow AND `start_time` < $timenow ORDER BY `start_time` ASC LIMIT 1

(Forbehold for ukorrekt syntax, men du burde få ideen...)
Gravatar #6 - Qw_freak
17. maj 2010 18:10
D_V (5) skrev:
er det ikke bare en

SELECT * FROM `data` WHERE `end_time` > $timenow AND `start_time` < $timenow ORDER BY `start_time` ASC LIMIT 1

(Forbehold for ukorrekt syntax, men du burde få ideen...)


ORDER BY `start_time` ASC LIMIT 1
hvad gør dette?
Gravatar #7 - reefermadness  
17. maj 2010 18:23
Det sorterer rækkerne efter 'start time'..
Gravatar #8 - Qw_freak
17. maj 2010 18:26
jeg mente nu mere:
ASC LIMIT1
Gravatar #9 - Ronson ⅍
17. maj 2010 18:28
asc = ascending = i stigende rækkefølge
limit 1 = begræns til 1 resultat
Gravatar #10 - Qw_freak
17. maj 2010 18:34
så mangler jeg bare at få det udskrevet!
Gravatar #11 - fjols
18. maj 2010 04:23
Tryk CTRL+P

Lidt mere seriøst så skal du vel bare ændre:
echo mysql_result($result, 'Start').'<br/>';
til
echo mysql_result($time_result, 'Start').'<br/>';

Eller hvad?
Gravatar #12 - Qw_freak
18. maj 2010 14:17
Jeg fandt ud af det!



                        $time_query='SELECT * FROM Data WHERE Start <= curtime() AND End >= curtime() AND curdate()=Date';
$time_result = mysql_query($time_query);

if (!$time_result) die ("Database access failed: " . mysql_error());

$time_row = mysql_fetch_row($time_result);

$teacher = $time_row[0];
$start = $time_row[1];
$end = $time_row[2];
$date = $time_row[3];
$room = $time_row[4];
$course = $time_row[5];
$information = $time_row[6];
$class = $time_row[7];
Gravatar #13 - T-Hawk
18. maj 2010 14:30
Kan dine timer kun ligge på en dag? Ellers skal du nok have noget interval på dit date field.

Udover det, så er det fy-fy at tilgå dine data på den måde. Du bør ALTID bruge navnet på din attribut. Ellers, hvis du så tilføjer en attribut til dit table, så skal du til at ændre i alt din kode.
Jeg vil istedet anbefale:


$time_row = mysql_fetch_array($time_result);
$teacher = $time_row['teacher'];
$start = $time_row['start'];
...snip...


Eller hvis du kan have flere timer på samme tid i dit system, så en simpel while løkke:


while ($time_row = mysql_fetch_array($time_result)) {
$teacher = $time_row['teacher'];
$start = $time_row['start'];
...snip...
}
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login