[MySQL] Data uit db halen met rare ID numbers.

Pagina: 1
Acties:

  • Rex
  • Registratie: September 2003
  • Laatst online: 20-02 14:48

Rex

Wolven zijn mooie dieren

Topicstarter
Hoi,

Ik heb een rare database indeling die ik niet kan aanpassen.
Het gaat om de volgende tabel:

IDName
A1Piet
A2Jan
A3Klaas
A4Mohammed
R1Ali
R2Bernard
A5Sinterklaas
A6Paashaas
R3Rex
A7Roxane


Ik moet een query hebben die de hoogste ID number uit de database haalt, maar die ID moet beginnen met R.... Dus de hoogste ID is R3.

Ik heb het volgende al geprobeerd:
code:
1
2
3
SELECT `ID` FROM `tabel` WHERE ID LIKE 'R%' ORDER BY `ID` DESC limit 1;
en
SELECT MAX(`ID`) FROM `tabel` WHERE ID LIKE 'R%';

Maar ik kreeg hier elke keer R999 eruit terwijl ik ook R1000 en hoger heb.

Iemand een idee?

Rex


  • Nvidiot
  • Registratie: Mei 2003
  • Laatst online: 11-01 23:32

Nvidiot

notepad!

R999 is ook hoger dan R1000 als je alfabetisch sorteert, en dat doet ie aangezien het een string is een geen integer. Op de een of andere manier de R eraf slopen en DAN sorteren dus.

What a caterpillar calls the end, the rest of the world calls a butterfly. (Lao-Tze)


  • Rex
  • Registratie: September 2003
  • Laatst online: 20-02 14:48

Rex

Wolven zijn mooie dieren

Topicstarter
:) That's the whole issue... Ik kan de DB NIET aanpassen en ik weet niet hoe ik het in de query zou moeten doen. :)

[ Voor 9% gewijzigd door Rex op 02-02-2006 11:23 ]

Rex


Verwijderd

Het veld is een tekstveld, geen numeriek veld; aangezien 9 > 1 is R999 > R1000. Wat je kan doen is

SQL:
1
SELECT `ID` FROM `tabel` WHERE ID LIKE 'R%' ORDER BY substring(ID,2) DESC limit 1;

Misschien is het nog nodig om die substring nog om te zetten naar een integer, maar volgens mij doet MySQL dat automagisch.

  • Rex
  • Registratie: September 2003
  • Laatst online: 20-02 14:48

Rex

Wolven zijn mooie dieren

Topicstarter
Verwijderd schreef op donderdag 02 februari 2006 @ 11:23:
Het veld is een tekstveld, geen numeriek veld; aangezien 9 > 1 is R999 > R1000. Wat je kan doen is

SQL:
1
SELECT `ID` FROM `tabel` WHERE ID LIKE 'R%' ORDER BY substring(ID,2) DESC limit 1;

Misschien is het nog nodig om die substring nog om te zetten naar een integer, maar volgens mij doet MySQL dat automagisch.
Ik krijg hieruit ook nog ID 999. (Ik heb maar gelijk bij SELECT 'substring(ID, 2 )' iets toegevoegd.)
Ik voel wel dat ik al bijna een oplossing heb.... maar nog net niet dan ;)

SQL:
1
SELECT substring(ID, 2 ) FROM `tabel` WHERE `ID` LIKE 'R%' ORDER BY substring(ID, 2 ) DESC LIMIT 1 


Ik zit ff in de manual te zoeken naar iets van een cast functie om te kijken of ik van de string een ID kan maken.

[ Voor 11% gewijzigd door Rex op 02-02-2006 11:36 ]

Rex


  • Rex
  • Registratie: September 2003
  • Laatst online: 20-02 14:48

Rex

Wolven zijn mooie dieren

Topicstarter
IK HEB HET :D

SQL:
1
SELECT substring(ID, 2 ) FROM `tabel` WHERE `ID` LIKE 'R%' ORDER BY CAST(substring(ID, 2) AS signed) DESC LIMIT 1


Thanks jeroenr for your help!!!

[ Voor 17% gewijzigd door Rex op 02-02-2006 11:39 ]

Rex


Verwijderd

Je probleem is dat MySQL enkel of alfabetisch, of numerisch weet te sorteren. Als je zeker bent dat je maar 1 beginletter hebt kan je het volgende doen:

SQL:
1
SELECT ID FROM tabel ORDER BY SUBSTRING(ID,1,1) DESC, (SUBSTRING(ID,2) + 0) DESC LIMIT 1

[ Voor 3% gewijzigd door Verwijderd op 02-02-2006 11:42 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

bosmeeuw, expliciet CASTen is netter dan impliciet door er nul bij op te tellen. Dan geef je aan wat er gebeurt, bij jouw methode is het een neveneffect.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • 4VAlien
  • Registratie: November 2000
  • Laatst online: 08-04 20:02

4VAlien

Intarweb!

mysql 5 heeft procedures, misschien dat je dan ook compare functies kan schrijven.

  • paulh
  • Registratie: Juli 1999
  • Laatst online: 12-03 16:31
ik hoop wel dat je tabel niet al te groot is/wordt, want dit valt niet te indexeren.

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]

Pagina: 1