Erstatning for rowspan i CSS

Her kan du få hjælp til computerproblemer og programmer, som ikke er omtalt på Ludvigs Hjørne.

Erstatning for rowspan i CSS

Indlægaf pm-c » tors sep 03, 2020 17:17

Hej Forum!

Rowspan findes ikke i CSS, hvad gør man så?

Jeg får min tabel fra en database med dette kald:

<?php
...
$sql = "SELECT person.name, sommerhus.svejnavnOgNr
FROM person, sommerhus, ejers
WHERE person.pID = ejers.pID
AND ejers.sID = sommerhus.sID
ORDER BY svejnavnOgNr
limit 0, 60";

$result = $conn->query($sql);

echo "<table class='center'>
<caption>Sommerhusadresse og navn</caption>
<thead>
<tr>
<th><small>vejnavnOgNr<br />sommerhus</small></th>
<th>navn
</th>
</tr>
</thead>
";

if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc())
{
echo "<tr>";
echo "<td>" . $row['svejnavnOgNr'] . "</td>";
echo "<td>" . $row['name'] . "</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "0 results";
}

$conn->close();
?>

Det giver følgende output:

vejnavnOgNr navn
**************************
Præstegaardsvej 37 Navn 1
Præstegaardsvej 39 Navn 2
Præstegaardsvej 39 Navn 3
Præstegaardsvej 42 Navn 4
Præstegaardsvej 42 Navn 5
Præstegaardsvej 42 Navn 6
Præstegaardsvej 44 Navn 7
Præstegaardsvej 46 Navn 8
Præstegaardsvej 48 Navn 9
Præstegaardsvej 50 Navn 10
Præstegaardsvej 52 Navn 11
...

Jeg vil gerne have, at adressen kun nævnes én gang i et felt,
der fylder det samme som de tilknyttede navne. F.eks. skulle
feltet med Præstegaardsvej 39 fylde det dobbelte, og feltet
med Præstegaardsvej 42 fylde det tredobbelte.
Forsøger med følgende CSS:

Udsnit af kunEenAdresse.css:

/* Præstegaardsvej 39 */
tr:nth-child(3) td:nth-child(1) {
visibility: hidden;
}

/* Præstegaardsvej 42 */
tr:nth-child(5) td:nth-child(1) {
visibility: hidden;
}
tr:nth-child(6) td:nth-child(1) {
visibility: hidden;
}
...

Efter kunEenAdresse.css fås:

vejnavnOgNr navn
**************************
Præstegaardsvej 37 Navn 1
Præstegaardsvej 39 Navn 2
Navn 3
Præstegaardsvej 42 Navn 4
Navn 5
Navn 6
Præstegaardsvej 44 Navn 7
Præstegaardsvej 46 Navn 8
Præstegaardsvej 48 Navn 9
Præstegaardsvej 50 Navn 10
Præstegaardsvej 52 Navn 11
...

Det er ikke godt nok. Feltet foran Navn 3 er ikke Præstegaardsvej 39,
men et 'hidden' felt. Det samme gælder felterne ud for Navn 5 og 6.
Forøgelse af højden på Præstegaardsvej 39 og 42 bevirker blot, at
den pågældende række forstørres.
'display: none' i stedet for 'visibility: hidden' bevirker, at
Navn rykker frem til kolonne 1.

Hvordan får jeg et Præstegaardsvej 39 felt, der fylder det dobbelte,
og et Præstegaardsvej 42 felt, der fylder det tredobbelte, og hvor navnene
bliver på deres nuværende pladser?

Venlig hilsen
Peter

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
pm-c
 
Indlæg: 79
Tilmeldt: søn nov 18, 2012 12:10

Re: Erstatning for rowspan i CSS

Indlægaf pm-c » tors sep 03, 2020 17:27

Rettelse:
Navnene 3, 5 og 6 i efter kunEenAdresse.css skal stå i kolonne 2 sammen med de øvrige navne.
pm-c
 
Indlæg: 79
Tilmeldt: søn nov 18, 2012 12:10

Re: Erstatning for rowspan i CSS

Indlægaf Kim Ludvigsen » tors sep 03, 2020 18:31

Jeg ved ikke, om jeg bare er for sløv i øjeblikket, men jeg kan ikke helt følge, hvad du gerne vil have. Men jeg tror ikke, løsningen er i CSS, men at du i stedet løser problemet i PHP.

Muligvis kan du også løse det i SQL-forespørgslen. Det er ikke noget, jeg selv har leget med, men prøv at kigge på GROUP-funktionen:
https://www.w3schools.com/sql/sql_groupby.asp
Mvh.
Kim Ludvigsen
Kim Ludvigsen
Site Admin
 
Indlæg: 6886
Tilmeldt: tors jun 08, 2006 0:49

Re: Erstatning for rowspan i CSS

Indlægaf pm-c » lør sep 05, 2020 15:24

Anvendelse af GROUP BY forudsætter, så vidt jeg kan se, at vejnavn og navn tilhører samme tabel, hvilket ikke er tilfældet. Jeg kan i hvert fald ikke få noget fornuftigt ud af forsøg på at erstatte ORDER BY med GROUP BY.

Nu har jeg været igennem mysql's tutorial og PHP's, men ikke fundet noget om mangedobling af cellehøjden.

Jeg nøjes indtil videre med den skitserede løsning, som trods alt forbedrer overskueligheden.
pm-c
 
Indlæg: 79
Tilmeldt: søn nov 18, 2012 12:10

Re: Erstatning for rowspan i CSS

Indlægaf Kim Ludvigsen » lør sep 05, 2020 16:35

Hvis det er to forskellige tabeller, så skulle JOIN vist kunne bruges.

Det jeg tænkte på med PHP var at gemme hvert resultat i et array i løkken og så tjekke, om værdien allerede findes, noget i stil med:

$adresse = array();

Løkke-start

If (in_array ($row[svejnavnOgNr], $adresse))
echo "<td rowspan='2'>$row[name]</td>";
else
echo "<td>$row[svejnavnOgNr]</td><td>$row[name]</td>";

$adresse[] = $row[svejnavnOgNr];

Løkke-slut

Men det skulle kunne gøres i MYSQL-forespørgslen, hvilket vil være smartere, men jeg har ikke selv leget med det.
Mvh.
Kim Ludvigsen
Kim Ludvigsen
Site Admin
 
Indlæg: 6886
Tilmeldt: tors jun 08, 2006 0:49

Re: Erstatning for rowspan i CSS

Indlægaf pm-c » søn sep 06, 2020 11:25

Meget interessant!
Jeg vil afprøve det. Hvis det virker vil jeg prøve at finde en løsning for, hvor der er 3 navne til en adresse (rowspan='3').
pm-c
 
Indlæg: 79
Tilmeldt: søn nov 18, 2012 12:10

Re: Erstatning for rowspan i CSS

Indlægaf pm-c » man sep 07, 2020 15:43

Tror, der er en farbar vej med din kode. Jeg har prøvet at flette den ind i min egen, se nedenfor. Problemet er, at hver gang der vises et vejnavn i rowspan=2, er der forinden det samme vejnavn i "rowspan=1". Jeg mangler et eller andet, der sletter disse "rowspan=1".
Når jeg har fundet ud af det, er der problemet med flere end 2 navne knyttet til en adresse.

if ($result->num_rows > 0) {
$adresse = array();
// output data of each row
while($row = $result->fetch_assoc())
{
"<tbody"; // no echo
echo "<tr>";
if (in_array ($row[svejnavnOgNr], $adresse))

echo "<td rowspan='2'>$row[svejnavnOgNr]</td>";
else
echo "<td>$row[svejnavnOgNr]</td>";
echo "<td>" . $row['name'] . "</td>";
echo "</tr>";
$adresse[] = $row[svejnavnOgNr];
"</tbody>";
}
echo "</table>";
} else {
echo "0 results";
}
pm-c
 
Indlæg: 79
Tilmeldt: søn nov 18, 2012 12:10

Re: Erstatning for rowspan i CSS

Indlægaf Kim Ludvigsen » man sep 07, 2020 17:27

Har du mulighed for at lave en tegning eller en prøveside med, hvordan tabellen skal se ud?

Umiddelbart vil jeg mene, at linjen:
echo "<td rowspan='2'>$row[svejnavnOgNr]</td>";

skulle være:
echo "<td rowspan='2'>$row[name]</td>";

Men jeg er ikke sikker på, hvordan du gerne vil have det til at se ud.
Mvh.
Kim Ludvigsen
Kim Ludvigsen
Site Admin
 
Indlæg: 6886
Tilmeldt: tors jun 08, 2006 0:49

Re: Erstatning for rowspan i CSS

Indlægaf pm-c » man sep 07, 2020 19:15

Hej Kim!
Jeg kan ikke finde ud af at anonymisere det på en fornuftig måde, så jeg har sendt et skærmdump til din mail. Der er din kode indarbejdet. Det, jeg ønsker, er et resultat uden dubletter af vejnavne og uden søjle 3. Din oprindelige kode resulterer i dublering af personnavnene.
Venlig hilsen
Peter
pm-c
 
Indlæg: 79
Tilmeldt: søn nov 18, 2012 12:10


Tilbage til Hjælp til alt

Hvem er online

Brugere der læser dette forum: Ingen og 15 gæster

cron