Vinnaren i pepparkakshustävlingen!
2009-06-22, 11:30
  #1
Avstängd
Varför fungerar det inte att sortera på det sättet jag vill här?

$q = $_GET['q'];
$typ = $_GET['typ'];
$var = $_GET['var'];
$order = $_GET['sortera'];

$query = "SELECT * FROM annonser where Rubrik LIKE '%$q%' AND Kategori LIKE '%$typ%' AND Lan LIKE '%$var%' ORDER BY '%$order%'";

formuläret är det inget fel på, alla namn stämmer.

Tack på förhand
Citera
2009-06-22, 11:44
  #2
Moderator
Protons avatar
Din order by är nog det konstigaste jag sett. Du kan inte skriva den sådär.

ORDER BY syftar till ett attribut i din tabell, inte en variabel och definitivt inte på det sätt du försökt med.

säg att det attribut du vill sortera efter heter "order". Då måste du använda snedfnuttar runt order, eftersom det är ett reserverat ord:
Kod:
$query = "SELECT * FROM annonser where Rubrik LIKE '%$q%' AND Kategori LIKE '%$typ%' AND Lan LIKE '%$var%' ORDER BY `order`";

För olika sorteringsriktningar på din order by kan du använda DESC och ASC efter det du vill sortera efter.
Citera
2009-06-22, 11:48
  #3
Avstängd
Det fungerade inte att göra så, då fick jag felmeddelande: Unknown column 'order' in 'order clause'
Citera
2009-06-22, 11:50
  #4
Medlem
micaeles avatar
Citat:
Ursprungligen postat av abiz
Det fungerade inte att göra så, då fick jag felmeddelande: Unknown column 'order' in 'order clause'
Ja, eftersom ORDER BY vill ha ett namn på en kolumn från den data du hämtar ut. Därefter kan du hänga på ASC eller DESC för att ange åt vilket håll det sorteras.
Citera
2009-06-22, 11:51
  #5
Avstängd
Däremot gick det att göra såhär rakt av: ORDER BY $order
funkade perfekt :S
Citera
2009-06-22, 12:09
  #6
Avstängd
men när jag sorterar efter pris (billigast högstupp) så hamnar typ 10000000 kr längre upp än vi säger 2 kr pga att 2 är större än 1, hur gör jag för att den ska läsa av hela talet?

Edit: löste det med + 0 för ASC
__________________
Senast redigerad av abiz 2009-06-22 kl. 12:22.
Citera
2009-06-22, 12:41
  #7
Medlem
Mys-Hitlers avatar
Citat:
Ursprungligen postat av abiz
men när jag sorterar efter pris (billigast högstupp) så hamnar typ 10000000 kr längre upp än vi säger 2 kr pga att 2 är större än 1, hur gör jag för att den ska läsa av hela talet?

Edit: löste det med + 0 för ASC
Det låter som om du har priset lagrat som en sträng.
Citera
2009-06-23, 10:26
  #8
Medlem
Bara så du vet så är ditt formulär helt öppet för s.k. SQL Injection. Du borde genast läsa på och förändra detta om ditt formulär på något sätt är exponerat mot Internet. Din sista fråga tyder också på att du behöver lära dig skillnaden på olika datatyper i MySQL och hur de lagras/sorteras.

MySQL:s online-manual är mycket hjälpsam, jag rekommenderar att du börjar där.

PS: prova mata in ' i ditt formulär.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback