![]() |
Jag har idag bestämt mig för att bygga ut en befintlig webbplats och har problem med MySQL-sortering.
Problemet är följande: Jag ska välja ut data från en MySQL-tabell ("tabell") enligt följande. Kod:
$a = mysql_fetch_row(mysql_query("SELECT link, text FROM tabell WHERE id IN ($y)")); "id" är bara ett nummer (som ökar med varje rad just nu) Detta funkade som det ska, men nu vill jag även sortera datan med ännu ett avseende. Jag har byggt in en ny kolumn i tabellen som heter "typ". "typ" kan bara innehålla ett av följande texter: "bil" "hus" eller "bat" (dessa är bara exempel, inget med mitt projekt att göra) Jag vill att $a ska vara den första raden i tabellen där $typ är "bil" och $b ska vara den andra raden i tabellen där $typ är "bil" och på samma sätt att $a ska vara den första raden i tabellen där $typ är "hus" och $b ska vara den andra raden i tabellen där $typ är "hus" HUR GÖR JAG DETTA? Sedan kommer jag bygga ut detta med if-satser if ($typ=="bil") *{ $a = mysql_fetch_row(mysql_query("SELECT link, text FROM tabell WHERE id IN ($y)")); $b = ... *} elseif ($typ=="hus") *{ $a = mysql_fetch_row(mysql_query("SELECT link, text FROM tabell WHERE id IN ($y)")); $b = ... ... *} Röd text = fel kod Jag tror inte jag har förklarat så bra, så fråga om ni inte förstår. Jag har noll koll på MySQL-funktioner, så skriv gärna så tydligt som möjligt, tack. |
2 bifogad(e) fil(er)
Här är en skiss över hur tabellen ser ut
|
$a = mysql_fetch_row(mysql_query("SELECT id, link, text FROM tabell WHERE typ = $typ order by id Limit 1"));
$b = mysql_fetch_row(mysql_query("SELECT id, link, text FROM tabell WHERE typ = $typ and id > ". $a['id'] ." order by id Limit 1")); Allternativt: $a = mysql_fetch_row(mysql_query("SELECT id, link, text FROM tabell WHERE typ = $typ order by id desc Limit 1")); $b = mysql_fetch_row(mysql_query("SELECT id, link, text FROM tabell WHERE typ = $typ and id < ". $a['id'] ." order by id desc Limit 1")); om du vill ha i omvänd ordning osv.. något i den stilen borde funka. |
AAh, tack så mycket! Ska prova med detta.
|
Select * from tabell where typ='bil' order by id limit 2
Ger de två rader där typ är lika med 'bil' och de två lägsta id-numren i dettta urval. I din exempel tabell har du sorterat id kolumnen i omvänd ordning. vill du ha det så även i din fråga så skriv ...order by id desc ... Ett tips: fokusera på att skriva bra frågor i Mysql, är mycket lättare att utgå från väl formaterade data än att försöka rådda till det i scripten sen. Och en förutsättning för att skriva bra frågor är ofta att databasen är väl upställd. Tveka inte att bygga om om det behövs. |
Kommer nog använda mig av följande:
$sql = 'SELECT * FROM `tabell` WHERE `typ` = \'bil\' ORDER BY `id` DESC'; Och sedan måste jag välja ut varje rad för sig, hur? |
Kanske ska jag räkna antalet rows efter select
$num = mysql_num_rows($result); Och sedan skapa ny numrering $y = $num; |
Detta verkar funka fram till att jag gör en SELECT.
Sedan uppstår problem när jag ska välja varje rad för sig, för id columnen blir t.ex. 6, 3, 1 istället för 9, 8, 7, 6, 5, 4, 3, 2, 1 Finns det ingen funktion att bara välja de första 10 raderna av selektionen var för sig? $sql = 'SELECT * FROM `tabell` WHERE `typ` = \'bil\' ORDER BY `id` DESC'; Alltså typ funktion för att: VÄLJ rad 1 uppifrån från selektionen $sql VÄLJ rad 2 uppifrån från selektionen $sql ... o.s.v. |
Eftersom ingen annan verkar reagera på det så får väl jag göra det.
Du behöver först av allt lära dig lite om databaser. Det sätt du jobbar med (mysql_fetch_row(mysql_query(...))) är extrem ineffektivt eftersom du dels gör om frågan varje gång (fast det är olika rader urt samma tebell du vill ha) och gör allt förutom fråga ett svårare. istället skall du köra: Kod:
$rs = mysql_query(SQL_SATS); |
Citat:
Okey, vänta med att svara... jag ska lära mig lite mer på egen hand. |
Alla tider är GMT +2. Klockan är nu 10:56. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson