webForumDet fria alternativet

sortera efter en array med mysql

Databaser & SQLur Databashanterare & SQL

17 svar · 686 visningar · startad av pellesvenne

Medlem sedan jan. 2002227 inlägg
Frågan#1

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";

Medlem sedan dec. 200012 464 inlägg
#2

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.)

Medlem sedan jan. 2002227 inlägg
#3

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

Medlem sedan dec. 19995 875 inlägg
#4
$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.

Medlem sedan jan. 2002227 inlägg
#5

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

Medlem sedan dec. 19995 875 inlägg
#6

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.

Medlem sedan jan. 2002227 inlägg
#7

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

Medlem sedan juni 200032 969 inlägg
#8

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

Medlem sedan jan. 2002227 inlägg
#9

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

Medlem sedan jan. 2002227 inlägg
#10

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

Medlem sedan juni 200032 969 inlägg
#11

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

Medlem sedan jan. 2002227 inlägg
#12

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

Medlem sedan jan. 2002227 inlägg
#13

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

Medlem sedan dec. 200012 464 inlägg
#14

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";
Medlem sedan juni 200032 969 inlägg
#15

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
$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. :)

Medlem sedan jan. 2002227 inlägg
#16

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?

Medlem sedan juni 200032 969 inlägg
#17

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

mvh

Medlem sedan juni 200032 969 inlägg
#18

Hur utföll testerna?

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