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";
17 svar · 685 visningar · startad av pellesvenne
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";
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.)
vad menar du? jag vill sortera det efter användarnamnen "1,2,3"
$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.
jag vill sortera efter arrayen och inte nått fält i databasen!
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.
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
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
jo jag vet det .. men hur får jag det sorterad efter det?
brimba:
inte riktigt det är ingen onlinelista!
det är en besokarlista typ!
jag tar ut inne arrayen från en besokare tabell!
Varför kan du inte joina in det i den här SQL-frågan och sortera därefter då?
posterna för antalet besökare har ökat till 500 tusen ? jag vill köra med array splittring istället och minska posterna
är det ingen som förstår mitt problem?
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";
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. :)
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?
Hur utföll testerna?