Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[SQLite3] sorteren op query volgorde

Pagina: 1
Acties:

  • Lawrentium
  • Registratie: Oktober 2005
  • Laatst online: 10-11 19:26
Aan de hand van de volgende query in Python toets ik of een gegeven route wel klopt.

code:
1
c.execute("SELECT WPNumber, ROUTE, WPID FROM rte WHERE ROUTE = ? AND (WPID = ? OR WPID = ?) LIMIT 3", (x[1], x[0], x[2])))


Input is bijvoorbeeld: WAYPOINTX ROUTE1234 WAYPOINTY

De query werkt, maar het vervelende is dat het eerste resultaat altijd het waypoint is met de laagste WPNumber. Logisch, omdat de tabel hier op is gesorteerd. Maar ik wil dat het eerste resultaat altijd het eerste waypoint is, dus ook als deze een hogere WPNumber heeft. Helaas krijg ik dit niet voor elkaar...

Mijn resultaat tot nu toe:

code:
1
c.execute("SELECT WPNumber, ROUTE, WPID FROM rte WHERE ROUTE = ? AND (WPID = ? OR WPID = ?) ORDER BY " + x[0] + ", " + x[2] + " LIMIT 3 ", (x[1], x[0], x[2])))


Dit geeft: sqlite3.OperationalError: no such column: WAYPOINTX

Iemand?

[ Voor 6% gewijzigd door Lawrentium op 07-10-2013 19:32 ]


  • The Eagle
  • Registratie: Januari 2002
  • Nu online

The Eagle

I wear my sunglasses at night

Wat als je zegt ORDER by WPID?

Ik ken je datamodel verder niet, dus valt zo weinig zinnigs over te zeggen verder.

Die laatste fout krijg je overigens omdat je geen order by veld opgeeft lijkt me.

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


  • Lawrentium
  • Registratie: Oktober 2005
  • Laatst online: 10-11 19:26
Het lijkt er op dat dit het inderdaad is... Veel te ver gezocht dus.. Thanks! :)

[ Voor 90% gewijzigd door Lawrentium op 07-10-2013 20:11 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Als WPID een string bevat zal ie in bovenstaand geval toch alfabetisch sorteren?

Mocht het toch niet werken, dan kan je zoiets doen:
ORDER BY WPID = waarde1, WPID = waarde2

Aka, sorteer op [0,1] en daarna weer op [0,1] afhankelijk van de precieze waarde van WPID.

Bovenstaande gaat er wel van uit dat je dergelijke expressions in de order by clause mag stoppen, zoniet dan kan je nog zoies in je select list stoppen:
SQL:
1
2
3
4
5
SELECT ...,
   CASE WPID WHEN waarde1 THEN 0 WHEN waarde2 THEN 1 ... ELSE 999999 END as sortOrder,
 ...
FROM ...
ORDER BY sortOrder

Dan maak je effectief een mapping tussen de benodigde waarde en de positie die jij eraan toe wilde kennen. En vervolgens sorteer je op die positie.