[mysql] string naar integer.

Pagina: 1
Acties:

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025
Ik heb een kolom waarin afentoe tekst staat, en af en toe een integer. Technisch is het helaas niet anders mogelijk.
Nu wil ik graag alle getallen selecteren die groter zijn dan x. Ik heb al een query geschreven die, als de database consistent is, alle rijen met getallen retourneert, maar nu moet ik daar nog even een integer van maken.

Ik zit te denken aan de volgende query:
code:
1
2
3
4
SELECT *
FROM scheepsdata (+ 6 joins)
WHERE Schip = '$EuropaNr' AND integer(Waarde) > 5
ORDER BY Scheepsnaam

Bestaat er in mysql zo'n functie?

Localhost, sweet localhost


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

code:
1
2
3
4
SELECT [alle andere kolommen], integer(Waarde) as intWaarde
FROM scheepsdata (+ 6 joins)
WHERE Schip = '$EuropaNr' AND integer(Waarde) > 5
ORDER BY Scheepsnaam

?

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 13-09 12:47

TheDane

1.618

ZOEK naar intval()

ennuh, technisch niet mogelijk :? :? :?

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025
Er bestaat geen variant in MySQL?
Dat ga je niet menen? PHP is geen optie, want er zullen ongeveer 6000 rijen in komen te staan tijdens de testfase, en 60000 in productiefase. Ik heb geen zin om dat allemaal door PHP te mangelen...

Localhost, sweet localhost


  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 13-09 12:47

TheDane

1.618

Op dinsdag 19 februari 2002 10:33 schreef kvdveer het een en ander:
maar ik ben eigenlijk nieuwsgieriger hiernaar:
Ik heb een kolom waarin afentoe tekst staat, en af en toe een integer. Technisch is het helaas niet anders mogelijk.

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Op dinsdag 19 februari 2002 10:31 schreef TheDane het volgende:
ZOEK naar intval()

ennuh, technisch niet mogelijk :? :? :?
intval is PHP
Als je conversie naat integer wil afdwingen kan je doen:

Waarde + 0 > 5

MySQL zegt de conversie naar number automatisch te doen, dus wellicht werkt het gewoon zonder de +0

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025
BLONT!!!
Hij doet het inderdaad gewoon. De reden dat ik geen resultaten kreeg was omdat er geen schepen waren met een tonnage onder de 5 ton... |:(


over mijn technische onmogelijkheid:
Ik heb de volgende structuur:
code:
1
2
3
4
5
6
7
  Schip (*EuropaNr,...)
    ^
    |
  scheepsgegeven (*Schip,*DataType,Waarde,...)
    |
    V
  scheepsgegeventype (Omschrijving,Eenheid,...)

In scheepsgegeven kan dus eenvoudig een hoeveelheid gegevens staan voor een schip. Aan de hand van DataType kan ik zien wat voor gegevens dat zijn, want dat is een foreign key naar scheepsgegeventype.
Scheepsgegeventype bevat alle soorten gegevens die over een schip opgeslagen kunnen worden.
Normaal gesproken sla je die gegevens in een tabel op, maar ik heb meer flexibiliteit nodig.

Als je alle schepen van meer dan 5 ton wilt hebben behoor je te tikken:
code:
1
2
3
4
5
SELECT schip.* 
FROM scheepsdata, schip
WHERE scheepdata.Schip = schip.EuropaNr
AND scheepsdata.DataType = 6
AND scheepsdata.Waarde > 5

Localhost, sweet localhost


Verwijderd

offtopic:
[quote]
Op dinsdag 19 februari 2002 10:57 schreef kvdveer het volgende:
BLONT!!!
[/quote]

yup, zeker, blond schrijf je met een d[quote]
Op dinsdag 19 februari 2002 10:57 had kvdveer het volgende moeten schrijven:
BLOND!!!
[/quote]

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Nog een tip:
Als je met 1 query meerdere kenmerken wilt ophalen van een schip en weer wilt representeren als een normaal record gaat dit als volgt erg mooi en gemakkelijk en je joined je niet suf.
code:
1
2
3
4
5
6
7
8
9
SELECT schip.EuropaNr
    ,max(if(datatype=6,waarde,null))
    ,max(if(datatype=8,waarde,null))
    ,max(if(datatype=10,waarde,null))
    ,max(if(datatype=15,waarde,null))
FROM   scheepsdata
    ,schip
WHERE  scheepdata.Schip = schip.EuropaNr
AND    scheepsdata.DataType IN (6,8,10,15)

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025
Op dinsdag 19 februari 2002 11:11 schreef Goodielover het volgende:
Nog een tip:
Als je met 1 query meerdere kenmerken wilt ophalen van een schip en weer wilt representeren als een normaal record gaat dit als volgt erg mooi en gemakkelijk en je joined je niet suf.
code:
1
2
3
4
5
6
7
8
9
SELECT schip.EuropaNr
    ,max(if(datatype=6,waarde,null))
    ,max(if(datatype=8,waarde,null))
    ,max(if(datatype=10,waarde,null))
    ,max(if(datatype=15,waarde,null))
FROM   scheepsdata
    ,schip
WHERE  scheepdata.Schip = schip.EuropaNr
AND    scheepsdata.DataType IN (6,8,10,15)
Ja, maar... dan krijg ik het toch niet in een record terug? Dat wil ik wel namelijk. of snap ik het nou niet? (ik kan het momenteel helaas niet uitproberen... morgen weer)

[zeik]
datatype 10 en 15 bestaan helemaal niet!!! :+
[/zeik]

Localhost, sweet localhost


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Sorry ik was de GROUP BY vergeten
code:
1
2
3
4
5
6
7
8
9
10
SELECT schip.EuropaNr
    ,max(if(datatype=6,waarde,null))
    ,max(if(datatype=8,waarde,null))
    ,max(if(datatype=10,waarde,null))
    ,max(if(datatype=15,waarde,null))
FROM   scheepsdata
    ,schip
WHERE  scheepdata.Schip = schip.EuropaNr
AND    scheepsdata.DataType IN (6,8,10,15)
GROUP BY schip.EuropaNr

Dit zou het moeten doen en 1 record opleveren per schip met in de kolommen daarachter de waarde die dat schip heeft voor datatype 6, 8, 10 en 15 (als die zouden bestaan)
Pagina: 1