webForumDet fria alternativet

Bryr sig inte om datum.

14 svar · 890 visningar · startad av tanten

tantenMedlem sedan nov. 20051 596 inlägg
#1

Den här koden har fungerat länge nu, men det verkar som att den inte bryr sig om olika datum längre om banan är den samma.

$result = mysql_query($query);
$curr_date  = "";
$curr_track = "";

while ($r = mysql_fetch_array($result)){
	if ($r['datum'] != $curr_date && $r['bana'] != $curr_track)
	{
		echo "<p><span class=\"nytt\">Start: ".$r['bana']." ".date('j/n',strtotime($r['datum']))." </span><br /></p>";
		$curr_date  = $r['datum'];
		$curr_track = $r['bana'];
	}
	echo "<p><span class=\"fet\">".$r['namn']."</span> <br /> Lopp:".$r['loppNr']." Nummer:".$r['sparNr']." ".$r['stracka']."".$r['starttyp']." ".$r['typ']."  ".$r['fnamn']." ".$r['enamn']." <br /></p>";
	}

Som läget är nu ska fem hästar ut i start. 3st. den 15:e och 2st den 19:e, men det skrivs ut att alla startar den 15:e.
Har det något att göra med att webhotellet uppgraderat både Mysql och php?
Det här felet har inte dykt upp tidigare, men jag minns inte om det matats in lopp tidigare som har olika datum, men samma bana så det kanske är där felet ligger.

aasahMedlem sedan mars 20034 471 inlägg
#2

tanten skrev:

Den här koden har fungerat länge nu, men det verkar som att den inte bryr sig om olika datum längre om banan är den samma.... Som läget är nu ska fem hästar ut i start. 3st. den 15:e och 2st den 19:e, men det skrivs ut att alla startar den 15:e.
Har det något att göra med att webhotellet uppgraderat både Mysql och php?
Det här felet har inte dykt upp tidigare, men jag minns inte om det matats in lopp tidigare som har olika datum, men samma bana så det kanske är där felet ligger.

Hummm.... är du helt säker på att datumen är rätt inmatade i databasen för alla hästar? I så fall vore det bra om vi fick se den SQL du matar in till databasen. Hur ser $query ut?

tantenMedlem sedan nov. 20051 596 inlägg
#3

Jag misstänker nu att samma sak händer om man matar in samma datum men på olika banor också. Men här är hela koden ut.

<?php
$query = "SELECT s. * , b.namn as bana, stad, l. * , k.enamn, fnamn, h.namn as namn, t. *
FROM starta s
JOIN lopp l ON s.loppID = l.loppID
JOIN bana b ON l.banID = b.banID
JOIN kusk k ON s.kuskID = k.kuskID
JOIN hest h ON s.stallID = h.stallID
JOIN lopptyp t ON l.typID = t.typID
LEFT JOIN resultat r ON l.loppID = r.loppID
WHERE r.loppID is null
ORDER BY l.datum, bana, l.loppNr";
$result = mysql_query($query);
$curr_date  = "";
$curr_track = "";

while ($r = mysql_fetch_array($result)){
	if ($r['datum'] != $curr_date && $r['bana'] != $curr_track)
	{
		echo "<p><span class=\"nytt\">Start: ".$r['bana']." ".date('j/n',strtotime($r['datum']))." </span><br /></p>";
		$curr_date  = $r['datum'];
		$curr_track = $r['bana'];
	}
	echo "<p><span class=\"fet\">".$r['namn']."</span> <br /> Lopp:".$r['loppNr']." Nummer:".$r['sparNr']." ".$r['stracka']."".$r['starttyp']." ".$r['typ']."  ".$r['fnamn']." ".$r['enamn']." <br /></p>";
	}
?>

Så jag misstänker att jag måste tänka om helt.
Men jag vet inte hur.
Och ja jag är helt säker på att datumen är rätt i databasen.

aasahMedlem sedan mars 20034 471 inlägg
#4
$query = "SELECT s. * , b.namn as bana, stad, l. * , k.enamn, fnamn, h.namn as namn, t. *
FROM starta s
JOIN lopp l ON s.loppID = l.loppID
JOIN bana b ON l.banID = b.banID
JOIN kusk k ON s.kuskID = k.kuskID
JOIN hest h ON s.stallID = h.stallID
JOIN lopptyp t ON l.typID = t.typID
LEFT JOIN resultat r ON l.loppID = r.loppID
WHERE r.loppID is null
ORDER BY l.datum, b.banID, l.loppNr";   //<-----Här!

bana är ju en tabell, du måste ordna efter kolumnnamnet inte tabellnamnet

Prova att byta ut bana mot b.banID enligt koden ovan.

tantenMedlem sedan nov. 20051 596 inlägg
#5

Nej det fungerade inte heller.
Om jag testade med flera lopp på samma bana men med olika datum så hamnade alla lopp under det första datumet.
Om jag hade samma datum men på olika banor så hamnar alla lopp under samma bana, men den som blev sist inmatad.

tantenMedlem sedan nov. 20051 596 inlägg
#6

Jag ändrade denna rad till

if ($r['datum'] != $curr_date && $r['datum'] != $curr_track)

och då blev det rätt åtminstone med samma bana men med olika datum.

aasahMedlem sedan mars 20034 471 inlägg
#7

tanten skrev:

Nej det fungerade inte heller.
Om jag testade med flera lopp på samma bana men med olika datum så hamnade alla lopp under det första datumet.
Om jag hade samma datum men på olika banor så hamnar alla lopp under samma bana, men den som blev sist inmatad.

Då är det något mycket konstigt med dina inmatade data! :q (Eller möjligen med JOIN-villkoren.) SQL-koden ovan ska sortera först alla likadana datum, därefter allt på samma bana och slutligen efter samma loppNr.

Exempel

Datum     BanID    LoppNr
080215    1          1
080215    1          7
080215    4          1
080215    4          2
080215    4          3
080219    2          1
080219    2          2
....
tantenMedlem sedan nov. 20051 596 inlägg
#8

Det är med all säkerhet så som du säger... men efter ett dygns testande och sidan ligger skarpt och förvirrar besökarna, så fungerar det i alla fall tills vidare med olika datum på samma bana.

Men det blir problem om hästarna går ut samma dag på olika banor, då klumpas alla loppen in på samma bana. Jag har försökt att se om jag skulle kunna joina på annat sätt, men inte lyckats.

Håller på lokalt nu och testar men har inte kommit på vad jag ska ändra... :OO

aasahMedlem sedan mars 20034 471 inlägg
#9

tanten skrev:

Men det blir problem om hästarna går ut samma dag på olika banor, då klumpas alla loppen in på samma bana. Jag har försökt att se om jag skulle kunna joina på annat sätt, men inte lyckats.

Håller på lokalt nu och testar men har inte kommit på vad jag ska ändra... :OO

Humm, jag skulle börja med att kolla att alla värden i databasen verkligen är rätt inlagda.

Om det verkar stämma får du posta db-struktur och exempeldata om du vill ha hjälp.

tantenMedlem sedan nov. 20051 596 inlägg
#10

Eftersom jag inte vet om det är databasen det är fel på så har jag matat in ett lopp som går samma datum, men på annan bana som två andra lopp, för att få fram felet.
Kan du se på bilderna om datan är rätt inlagda. Jag tycker det ser ut så. Men outputen blir som det bilden visar.
Är det inte if-satsen som är fel?

banafel.jpgbanafelut.jpg
aasahMedlem sedan mars 20034 471 inlägg
#11

Jo, det verkar vara fel på if-satsen. Dock borde du bara ta ut de kolumner som är av intresse ur megajoinen - inte minst blir det mer lättläst då. Nu har du ju tex två kolumner med loppID.

aasahMedlem sedan mars 20034 471 inlägg
#12

Byt && mot || - du vill ju ha en ny header om en av dem är annorlunda. (Alltså A||B är sant om : A sant, B sant, eller både A och B sanna.)

$curr_date  = "";
$curr_track = "";

while ($r = mysql_fetch_array($result)){
    if ($r['datum'] != $curr_date || $r['bana'] != $curr_track) //<--- Byt!!!
    {
        echo "<p><span class=\"nytt\">Start: ".$r['bana']." ".date('j/n',strtotime($r['datum']))." </span><br /></p>";
        $curr_date  = $r['datum'];
        $curr_track = $r['bana'];
    }
    echo "<p><span class=\"fet\">".$r['namn']."</span> <br /> Lopp:".$r['loppNr']." Nummer:".$r['sparNr']." ".$r['stracka']."".$r['starttyp']." ".$r['typ']."  ".$r['fnamn']." ".$r['enamn']." <br /></p>";
    }
?>
tantenMedlem sedan nov. 20051 596 inlägg
#13

Jag har tänkt sant fram och tillbaka men :( det blir ingen ny "header". Det blir precis likadant som bilden även med ditt förslag. 2 lopp på fel bana.
Blir snurrig...
Nu ändrade jag Selecten också. Tack så jättemycket för påminnelsen... :)

SELECT s. stracka, sparNr , b.namn as bana, stad, l. datum, loppNr, k.enamn, fnamn, h.namn as namn, t. typ, starttyp
FROM starta s
osv som tidigare.
aasahMedlem sedan mars 20034 471 inlägg
#14
$query = " SELECT s. stracka, sparNr , b.namn as banNamn, stad, l. datum as dag, loppNr, k.enamn, fnamn, h.namn as namn, t. typ, starttyp 
FROM starta s
JOIN lopp l ON s.loppID = l.loppID
JOIN bana b ON l.banID = b.banID
JOIN kusk k ON s.kuskID = k.kuskID
JOIN hest h ON s.stallID = h.stallID
JOIN lopptyp t ON l.typID = t.typID
LEFT JOIN resultat r ON l.loppID = r.loppID
WHERE r.loppID is null
ORDER BY dag, banNamn, l.loppNr";

Jag är osäker på om en del av problemet möjligen kan vara att ditt kolumnalias för b.namn sammanfaller med ett tabellnamn. Så vi undanröjer varje tvivel med ett annat alias, banNamn. Detta ändras i SELECT och ORDER BY.

Du vill ha en ny header för varje ny kombination av dag och banNamn?

$result = mysql_query($query);

//De värden vi hade förra varvet i while
$oldDag  = "";
$oldBanNamn = "";

while ($r = mysql_fetch_array($result)){
    if ($r['dag'] != $oldDay || $r['banNamn'] != $oldBanNamn) {
        echo "<p><span class=\"nytt\">Start: ".$r['banNamn']." ".date('j/n',strtotime($r['dag']))." </span><br /></p>";
        $oldDag  = $r['dag'];
        $oldBanNamn = $r['banNamn'];
    }
    echo "<p><span class=\"fet\">".$r['namn']."</span> <br /> Lopp:".$r['loppNr']." Nummer:".$r['sparNr']." ".$r['stracka']."".$r['starttyp']." ".$r['typ']."  ".$r['fnamn']." ".$r['enamn']." <br /></p>";
    }
?>
tantenMedlem sedan nov. 20051 596 inlägg
#15

Ja jag vill ha en ny header för varje kombination av bana och datum och nu ser det ut som det fungerar, ska kolla med lite fler kombinationer.
Ska nu försöka ge mig på att separera html och php... :)

Tack så jattemycket. :bire :bire

140 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)