---
title: "Sortering i tabell"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/146675-sortering-i-tabell"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "learn"
published: "2006-05-10T15:26:46.000Z"
updated: "2006-05-11T09:44:54.000Z"
replies: 8
views: 368
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/146675-sortering-i-tabell"
---

# Sortering i tabell

## #1 — learn, 2006-05-10T15:26Z

Jag har en tabell fylld med data hämtad från en mysql-databas. Nu vill jag att besökaren själv skall kunna välja i vilken ordning posterna skall sorteras efter genom att klicka på kolumnens rubrik.

Så här ser det ut nu:

```php

<?
// Hämta personer
?>

<table>

<tr>
<td>Förnamn</td><td>Efternamn</td><td>Ålder</td>
</tr>

<?
$sql = mysql_query("
SELECT fNamn, eNamn, alder
FROM personer
ORDER BY fName
");

while ($r = mysql_fetch_array($sql)) {

?>

<tr>
<td><?=$r['fNamn']?></td><td><?=$r['eNamn']?></td><td><?=$r['alder']?></td>
</tr>

<?
}
?>

</table>
```

Rubrikerna är alltså i detta fall "Förnamn", "Efternamn" och "Ålder". Klickar besökaren på "Efternamn" så skall alltså posterna sorteras efter personens efternamn A-Ö, klickar han/hon sedan på samma rubrik igen så sorteras de enligt Ö-A. 

"Aktuell" kolumn skall markeras med en bild framför rubriken. Vid A-Ö skall "bild.gif" visas och Ö-A "bild2.gif".

Jag kan inte komma på hur jag skall göra och skulle därför vara oerhört tacksam ifall ngn av er kan hjälpa mig! Tack!   :)

Permalänk: https://www.webforum.nu/p/146675

## #2 — learn, 2006-05-11T06:28Z

Någon som ngt förslag på hur jag kan göra?

Permalänk: https://www.webforum.nu/p/1813071

## #3 — The_Hulk, 2006-05-11T07:07Z

Här är en början.

```php
<?
// Hämta personer
$order = isset($_GET['order']) ? $_GET['order'] : "fNamn";
$orderad  = isset($_GET['order']) ? $_GET['orderad'] : "asc";

if($order != "fNamn" || $order != "eNamn" || "$order != "alder")
{
    $order = "fNamn";
}

if($orderad != "asc" || $orderad != "desc")
{
    $orderad = "asc";
}

?>

<table>

<tr>
<td><a href="?order=fNamn&orderad=<?=($orderad=="asc"?"desc":"asc"?>">Förnamn</a></td><td><a href"?order=eNamn&orderad=<?=($orderad=="asc"?"desc":"asc"?>">Efternamn</a></td><td><a href"?order=alder&orderad=<?=($orderad=="asc"?"desc":"asc"?>">Ålder</a></td>
</tr>

<?

$sql = mysql_query("
SELECT fNamn, eNamn, alder
FROM personer
ORDER BY $order $orderad
");

while ($r = mysql_fetch_array($sql)) {

?>

<tr>
<td><?=$r['fNamn']?></td><td><?=$r['eNamn']?></td><td><?=$r['alder']?></td>
</tr>

<?
}
?>

</table>
```

Permalänk: https://www.webforum.nu/p/1813076

## #4 — Sjodahl, 2006-05-11T07:10Z

Vad gör denna raden igentligen?
tror aldrig jag har fått in det där med ett "?" och ":"

```
$sort = isset($_GET['sort']) ? $_GET['sort'] : "fNamn";
```

Permalänk: https://www.webforum.nu/p/1813078

## #5 — The_Hulk, 2006-05-11T07:16Z

Vet faktiskt inte vad det kallas.
om det som står mellan = och ? är sant tilldelas varaiblen $sort det som står mellan ? och : är det falskt får variablen $sort värdet mellan : och ;
variablen $sort får värdet av $\_GET\['sort'\] om isset($\_GET\['sort'\]) är sant och "fNamn" om det är falskt.

$variabel = (boolskt värde) ? (värder om det är sant) : (värde om det är falskt);

Lite kompaktare sätt att skriva if-satsen

```php
if(isset($_GET['sort']))
{
    $sort = $_GET['sort'];
}
else
{
    $sort = "fNamn";
}
```

hoppas att någon av förklaringarna kan hjälpa.

Permalänk: https://www.webforum.nu/p/1813080

## #6 — Sjodahl, 2006-05-11T07:18Z

aha då är jag med... tack!

Permalänk: https://www.webforum.nu/p/1813081

## #7 — Sjodahl, 2006-05-11T08:21Z

aha då är jag med... tack!

Permalänk: https://www.webforum.nu/p/1813097

## #8 — learn, 2006-05-11T08:53Z

Tack för ditt tips The_Hulk. Det var dock ett antal fel i din kod, slarvfel förmodar jag. Här kommer en korrigerad version av din kod:

```php
<?

$order = isset($_GET['order']) ? $_GET['order'] : "fNamn";
$orderad  = isset($_GET['order']) ? $_GET['orderad'] : "asc";

if ($order != "fName" && $order != "lName" && $order != "born")
{
    $order = "fName";
}

if ($orderad != "asc" && $orderad != "desc")
{
    $orderad = "asc";
}

?>

<table>

<tr>
<td><a href="?order=fName&orderad=<?=$orderad=="asc"?"desc":"asc"?>">Förnamn</a></td>
<td><a href="?order=lName&orderad=<?=$orderad=="asc"?"desc":"asc"?>">Efternamn</a></td>
<td><a href="?order=born&orderad=<?=$orderad=="asc"?"desc":"asc"?>">Ålder</a></td>
</tr>

<?

$sql = mysql_query("
SELECT fName, lName, born
FROM person
ORDER BY $order $orderad
") or die(mysql_error());

while ($r = mysql_fetch_array($sql)) {

?>

<tr>
<td><?=$r['fName']?></td><td><?=$r['lName']?></td><td><?=$r['born']?></td>
</tr>

<?
}
?>

</table>
```

Passade även på att ändra till den faktiska databas-queryn. Detta fungerar ju bra, förutom att den ändrar desc/asc-ordningen när jag klickar på en ny kolumn-rubrik...det ska den ju inte göra, endast om jag klickar på samma rubrik två gånger.

Dessutom:

> **learn skrev:**
>
> "Aktuell" kolumn skall markeras med en bild framför rubriken. Vid A-Ö skall "bild.gif" visas och Ö-A "bild2.gif".

Permalänk: https://www.webforum.nu/p/1813111

## #9 — The_Hulk, 2006-05-11T09:44Z

Tänkte att om du fick hjälp en bit kanske du kunde göra resten själv.
Felen berodde nog på slarv, testade inte koden utan skrev det bara rakt ner i WF.

har inte testat detta heller men hoppas att det ska fungera.

```php
<?
sesstion_start();

$order = isset($_GET['order']) ? $_GET['order'] : "fNamn";
$orderad  = isset($_GET['order']) ? $_GET['orderad'] : "asc";

if ($order != "fName" && $order != "lName" && $order != "born")
{
    $order = "fName";
}

if ($orderad != "asc" && $orderad != "desc")
{
    $orderad = "asc";
}

$fNamnBild = "";
$eNamnBild = "";
$alderBild = "";

$fNamnOrderAD = "";
$eNamnOrderAD = "";
$alderOrderAD = "";

if($_SESSION['order'] == "fNamn" && $order == "fNamn")
{
    $fNamnOrderAD = ($orderad == "asc" ? "desc" : "asc") : "asc";
    $fNamnBild = $fNamnOrderAD == "asc" ? "bild.gif" : "bild2.gif";
}

if($_SESSION['order'] == "fNamn" && $order == "eNamn")
{
    $eNamnOrderAD = ($orderad == "asc" ? "desc" : "asc") : "asc";
    $eNamnBild = $eNamnOrderAD == "asc" ? "bild.gif" : "bild2.gif";
}

if($_SESSION['order'] == "fNamn" && $order == "alder")
{
    $alderOrderAD = ($orderad == "asc" ? "desc" : "asc") : "asc";
    $alderBild = $alderOrderAD == "asc" ? "bild.gif" : "bild2.gif";
}

?>

<table>

<tr>
<td><a href="?order=fName&orderad=<?=$fNamnOrderAD?>"><?=$fNamnBild!=""?"<img src='" . $fNamnBild . "' />":""?>Förnamn</a></td>
<td><a href="?order=lName&orderad=<?=$eNamnOrderAD?>"><?=$eNamnBild!=""?"<img src='" . $eNamnNild . "' />":""?>Efternamn</a></td>
<td><a href="?order=born&orderad=<?=$alderOrderAD?>"><?=$alderBild!=""?"<img src='" . $alderBild . "' />":""?>Ålder</a></td>
</tr>
<?

$_SESSION['order'] = $order;

$sql = mysql_query("
SELECT fName, lName, born
FROM person
ORDER BY $order $orderad
") or die(mysql_error());

while ($r = mysql_fetch_array($sql)) {

?>

<tr>
<td><?=$r['fName']?></td><td><?=$r['lName']?></td><td><?=$r['born']?></td>
</tr>

<?
}
?>

</table>
```

Permalänk: https://www.webforum.nu/p/1813133

---

Tråden på webben: https://www.webforum.nu/amne/php/146675-sortering-i-tabell
