---
title: "sortera efter en array med mysql"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/119293-sortera-efter-en-array-med-mysql"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "pellesvenne"
published: "2004-11-17T19:28:09.000Z"
updated: "2005-01-21T15:30:04.000Z"
replies: 17
views: 774
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/databaser-sql/119293-sortera-efter-en-array-med-mysql"
---

# sortera efter en array med mysql

## #1 — pellesvenne, 2004-11-17T19:28Z

varför kan man inte sortera efter arrayen?

$inne = "'1','2',3'";

$sql="SELECT \* FROM medlemmar WHERE anvandarnamn IN (".$inne.") order by anvandarnamn IN (".$inne.")  ASC";

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

## #2 — LarsG, 2004-11-17T19:45Z

Eftersom 

```
anvandarnamn IN (".$inne.")
```

alltid blir *True* så påverkar det inte sorteringen.

Vilken ordning vill du ha? Exemplifiera. (Det beror inte på att jag saknar alternativ, tvärtom.)

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

## #3 — pellesvenne, 2004-11-17T22:15Z

vad menar du? jag vill sortera det efter användarnamnen "1,2,3"

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

## #4 — Brimba, 2004-11-17T22:36Z

```
$sql="SELECT * FROM medlemmar WHERE anvandarnamn IN (".$inne.") order by username ASC";
```

Detta förutsätter dock att tabellen medlemmar har ett fält som heter username.

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

## #5 — pellesvenne, 2004-11-19T11:13Z

jag vill sortera efter arrayen och inte nått fält i databasen!

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

## #6 — Brimba, 2004-11-22T07:47Z

Men du kan inte sortera efter en lista på det viset, såvida du inte vill ställa lika många order by som du har poster i arrayen.

Jag vet inte hur databasen sorterar resultatet per default när man anger ett wherevillkor med in(). Om du har tur så tar den och lägger till rätt användarnamn för varje del som finns i din in()-fråga. Har du provat det?

```
$sql="SELECT * FROM medlemmar WHERE anvandarnamn IN (".$inne.")
```

Hur är namnen i arrayen sorterade?
Som jag förstår det så är det en onlinelista. Ett annat sätt kan ju vara att uppdatera ett fält i tabellen, exempelvis lastDateTimeOnline. Sedan kan du sortera på det fältet när du hämtar de som är online.

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

## #7 — pellesvenne, 2005-01-04T18:33Z

sortera efter en array med mysql

$inne = "'anv1','anv2','anv3','anv4'";

```
mysql_query("SELECT *FROM medlemmar WHERE anvandarnamn IN (".$inne.")");
```

Mysql sorterar ej efter IN?

resultatet blir så här:

anv4
anv2
anv3
anv1

istället för:
anv1
anv2
anv3
anv4

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

## #8 — @nders, 2005-01-04T18:51Z

Inga dbms sorterar efter IN. IN har ingenting med sortering att göra, utan endast villkor för vilka poster som ska returneras.

Det går bra att använda din tidigare tråd. Jag slår ihop trådarna.

Mvh

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

## #9 — pellesvenne, 2005-01-04T19:18Z

jo jag vet det .. men hur får jag det sorterad efter det?

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

## #10 — pellesvenne, 2005-01-05T21:07Z

brimba: 
inte riktigt det är ingen onlinelista!
det är en besokarlista typ!
jag tar ut inne arrayen från en besokare tabell!

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

## #11 — @nders, 2005-01-05T21:46Z

Varför kan du inte joina in det i den här SQL-frågan och sortera därefter då?

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

## #12 — pellesvenne, 2005-01-06T17:01Z

posterna för antalet besökare har ökat till 500 tusen ? jag vill köra med array splittring istället och minska posterna

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

## #13 — pellesvenne, 2005-01-10T18:53Z

är det ingen som förstår mitt problem?

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

## #14 — LarsG, 2005-01-10T19:18Z

Du måste gå igenom posterna i din array och skapa en order by enligt

```
$inne = "'1','2',3'";
$sql="SELECT * FROM medlemmar WHERE anvandarnamn IN (".$inne.") order by case anvandarnamn 
when '1' then 1
when '2' then 2
when '3' then 3 end";
```

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

## #15 — @nders, 2005-01-10T19:23Z

Jodå. Jag kan inte PHP dock, så det går säkert att göra snyggare. Men detta skall funka om du ser till att rätta till tabell- och fältnamnen:

```php
<?php
$inne = "'Pelle','Olle','Kalle'";
$arrInne = explode(",", $inne);
$i=0;
foreach ($arrInne as $namn) {
	$i++;
	$strSQL = $strSQL . " WHEN username = " . $namn . " THEN " . $i;
}

$strSQL = "SELECT * FROM users WHERE username IN (" . $inne . ") ORDER BY CASE " . $strSQL . " END ";
?>
```

Edit: Och där kom LarsG med ett svar samtidigt som jag lärde mig lite PHP. :)

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

## #16 — pellesvenne, 2005-01-12T02:54Z

tack ska ni ha! men jag har hört att IN funktionen är slö? 
vad rekomenderar ni?

Att använda IN funktionen med 7500 poster som den söker igenom
eller att köra en innerjoin med 500 tusen poster?

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

## #17 — @nders, 2005-01-12T06:56Z

Det bästa sättet att ta reda på det är nog att testa.

mvh

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

## #18 — @nders, 2005-01-21T15:30Z

Hur utföll testerna?

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/119293-sortera-efter-en-array-med-mysql
