webForumDet fria alternativet
Logga in / Bli medlem

Från databas till HTML-tabell

PHP

16 svar · 300 visningar · startad av Web-Tor

Medlem sedan nov. 200013 890 inlägg
Frågan#1

Jag är i behov av hjälp! :x
Jag har tänkt så det knakar men har ingen lösning i sikte.

Jag har en databas med tre kolumner.
Dom ser ut så här:

[b]Name | Week | Status[/b]
-----------------------
Kalle | 10 | 10
Kalle | 12 | 20
Kalle | 14 | 30
Kalle | 15 | 40
Lasse | 12 | 21
Lasse | 14 | 31
Lasse | 15 | 41
Lasse | 16 | 51

Nu skulle jag vilja ha ut all data och visa den i en vanlig tabell.
Så här ungefär:

[b]Week  Kalle  Lasse[/b]
-----------------------
10     10      -
12     20     21
14     30     31
15     40     41
16      -     51

Antalet personer och veckor är inte konstant utan kan variera.

Visa nu vad ni går för och hjälp en stackars PHP-kompis. :)

Medlem sedan sep. 20011 086 inlägg
#2

$sql = "select distinct week from tabell";

$res = mysql_query($sql);
while($row = mysql_fetch_object($res)){
$sql2 = "select * from tabell where week = $row->week";
$res2 = mysql_query($sql2);
while($row2 = mysql_fetch_object($res2)){
echo $row2->name
}
}

borde fungera....

Medlem sedan nov. 200013 890 inlägg
#3

Nja...

Det enda jag får ut på skärmen är:
Kalle
Kalle
Lasse
Kalle
Lasse
Kalle
Lasse
Lasse

Medlem sedan sep. 20011 086 inlägg
#4

jo, men du får ju ändra lite i utskriften så att du får rätt format.....

Medlem sedan nov. 200013 890 inlägg
#5

Läs igenom mitt första inlägg en gång till. Jag vill att den skall skriva ut Kalle EN gång och Lasse EN gång. ;)

Sedan måste jag ju få ut veckorna och statusen också...

Medlem sedan sep. 20011 086 inlägg
#6

echo "<table><tr><th>Week</th>";
while($hej = mysql_fetch_object(mysql_query("select distinct name from tabell"))){
echo "<th>$hej->name</th>";
}
echo "</tr>";
sql = "select distinct week from tabell";
$res = mysql_query($sql);
while($row = mysql_fetch_object($res)){
echo "<tr>";
echo "<td>$row->week</td>";
$sql2 = "select * from tabell where week = $row->week";
$res2 = mysql_query($sql2);
while($row2 = mysql_fetch_object($res2)){
echo "<td>$row2->status</td>";
}
echo "</tr>";
}

nåt sånt kanske

Medlem sedan nov. 200013 890 inlägg
#7

Nu är det nära!

Så här set utskriften ut nu:

[b]Week  Kalle  Lasse[/b]
-----------------------
10     10
12     20     21
14     30     31
15     40     41
16     [b][red]51[/b]

Det blir bara ett litet fel. :x
Statusen för vecka 16 hamnar på Kalle i stället för Lasse...

Medlem sedan jan. 20007 697 inlägg
#8

Jag lånar pimmes kod så länge

echo "<table><tr><th>Week</th>";
while($hej = mysql_fetch_object(mysql_query("select distinct name from tabell"))) {
    echo "<th>$hej->name</th>";
}
echo "</tr>";
sql = "select distinct week from tabell";
$res = mysql_query($sql);
while($row = mysql_fetch_object($res)) {
    echo "<tr>";
    echo "<td>$row->week</td>";
    $sql2 = "select * from tabell where week = $row->week";
    $res2 = mysql_query($sql2);
    while($row2 = mysql_fetch_object($res2)) {
        if (!$row2->status) {
            echo "<td>-</td>";
        }else {
            echo "<td>$row2->status</td>";
        }
    echo "</tr>";
}
Medlem sedan nov. 200013 890 inlägg
#9

Det gjorde tyvärr inte nån skillnad Kim. :(

        if (!$row2->status) {
            echo "<td>-</td>";
        }else {
            echo "<td>$row2->status</td>";
        }

$row2->status har ju alltid ett värde...

Medlem sedan jan. 20007 697 inlägg
#10

Stupid me! Vad har det för värde när det blir tomt då?

Medlem sedan nov. 200013 890 inlägg
#11

Den blir ju aldrig tom. Det är det som är problemet...

Om vi tar den första raden:

[b]Week  Kalle  Lasse[/b]
-----------------------
10     10      -

Denna vecka har alltså inte Lasse rapporterat nån status och jag vill skriva ut ett streck.

Hur mycket jag än tänker så kommer jag inte på någon lösning. :x

Medlem sedan jan. 20007 697 inlägg
#12

Vad får du ut för värde då? Du måste ju få ut något värde väl?

Sen är det väl bara att ersätta det med hjälp av str_replace()

Medlem sedan dec. 200012 464 inlägg
#13
$sql2 = "select * from tabell t1 left join tabell t2 on t2.week = $row->week
  and t1.name = t2.name and t1.week = t2.week";

Kanske värt att testa?

Medlem sedan nov. 200013 890 inlägg
#14

Utskriften blir så här:

Week  Kalle  Lasse
-----------------------
10     10     [b][red]*[/b]
12     20     21
14     30     31
15     40     41
16     51     [b][red]*[/b]

* innebär att den inte skriver ut någonting. Inte ens en cell.
Raden där det står echo "<td>$row2->status</td>"; körs bara en gång för vecka 10 och 16.

Medlem sedan nov. 200013 890 inlägg
#15

Jag fattar faktiskt inte hur jag skall använda din sql-fråga Lars men det verkar som en väldigt krånglig lösning.

Att visa resultatet från en databas i en matris borde ju vara skitlätt! Jag fattar inte att det skall vara så krångligt.

Ingen som kan komma på något annat sätt att lösa problemet?

Medlem sedan dec. 200012 464 inlägg
#16

Jag tänkte bara att du skulle ersätta pimmes $sql2 med min fråga.

Använder du Mysql?

Medlem sedan nov. 200013 890 inlägg
#17

Faran över!
Min ASP-kunniga kollega har återigen kommit till min räddning.

255 ms totalt · 4 externa anrop · v20260731065814-full.14655e19
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)