Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  SQL split+otsing märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
raitl
HV veteran


liitunud: 20.01.2002



Autoriseeritud ID-kaardiga

sõnum 11.06.2011 21:47:43 SQL split+otsing vasta tsitaadiga

Mul on andmebaas, kus ühes väljas on kaks väärtust, komaga eraldatud.


Id    coordinates
1     58.88032705794757, 26.231494373321542
2     57.605179803488106, 27.01083702468873
3     59.1640776272339, 26.77066130065919


Nüüd tekkis vajadus teostada koordinaatide otsingut (GET Id WHERE coord1 is x AND coord2 is y). Kõige lollikindlam variant oleks kindlasti koordinaadid kahte eraldi tulpa lüüa, kuid see tähendaks paljude erinevate funktsioonide ümberkirjutamist.

On keegi sarnase murega kokku puutunud või oskab mingit lahendust soovitada?
Kommentaarid: 166 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 147
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 11.06.2011 22:21:20 vasta tsitaadiga

Huvitav oleks teada, miks peaks keegi arvväärtusi baasis stringina hoidma?
Aga kui kiiret lahendust vaja, siis midagi stiilis WHERE coordinates LIKE 'x%' and coordinates LIKE '%y' või siis olenevalt andmetest regexpiga veidi kindlam.
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
19Mart94
HV kasutaja

liitunud: 22.06.2010



Autoriseeritud ID-kaardiga

sõnum 11.06.2011 23:00:13 vasta tsitaadiga


Select * From TABLE Where SUBSTRING_INDEX(SUBSTRING_INDEX( `coordinates` , ', ', 2 ),', ',1) = '".$_GET['x_value']."' And SUBSTRING_INDEX(SUBSTRING_INDEX( `coordinates` , ', ', -1 ),' ',2) = '".$_GET['y_value']."'


Aga palun icon_wink.gif
Kommentaarid: 33 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 31
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 12.06.2011 13:12:10 vasta tsitaadiga

Mõistlik oleks oma andmemudel ikka ümber teha, ega see elu sul ilusamaks ei lähe, kui süsteem areneb ja täieneb. icon_smile.gif

Aga hetkel, kui on vaja mõlema koordinaadi järgi korraga otsida, siis oleks optimaalsem ehk isegi niimoodi:
sql:
  1. SELECT id FROM tabel WHERE coordinates = CONCAT(x_value, ', ', y_value)
Peaks igal juhul kiirem olema, kuna ei ole vaja iga rea kohta substring operatsioone teha, nagu siin eelpool välja pakuti.

Aga ausõna, tee endale ja inimkonnale teene ja vaata oma andmemudel ümber. icon_smile.gif Natukene trikitades saad ilmselt suhteliselt palju olemasolevast funktsionaalsusest toimima jätta, kui tabeli ümber teed ja tabeli põhjal view, mis annab samasugust väljundit nagu tabel praegu. Siis päringud jäävad tööle ainult tabel -> view nimevahetusega ja ümber tuleb teha ainult insert/update laused.

_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
raitl
HV veteran


liitunud: 20.01.2002



Autoriseeritud ID-kaardiga

sõnum 12.06.2011 15:12:28 vasta tsitaadiga

Tjah, seedisin jah seda asja ja teen ikka asja üks kord ja õigesti, selle asemel et hiljem patchi patchida.

Tänud kõigile asjasse süvenemast.
Kommentaarid: 166 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 147
tagasi üles
vaata kasutaja infot saada privaatsõnum
webromps
HV kasutaja

liitunud: 13.06.2005



Autoriseeritud ID-kaardiga

sõnum 13.06.2011 13:33:27 vasta tsitaadiga

DoS kirjutas:
Huvitav oleks teada, miks peaks keegi arvväärtusi baasis stringina hoidma?
Aga kui kiiret lahendust vaja, siis midagi stiilis WHERE coordinates LIKE 'x%' and coordinates LIKE '%y' või siis olenevalt andmetest regexpiga veidi kindlam.

OT:
Oleneb mis arvväärtusi ja milleks sa neid kasutad.
Hea näide isikukood. Mõistlik on teda hoida stringina, kuna kui sul on vaja saada kätte sugu või sünnikuupäev, siis stringi töötlemine on tunduvalt lihtsam.
Kommentaarid: 6 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
wiinanina
HV kasutaja

liitunud: 27.02.2003




sõnum 15.06.2011 19:33:40 vasta tsitaadiga

webromps kirjutas:
.....
OT:
Oleneb mis arvväärtusi ja milleks sa neid kasutad.
Hea näide isikukood. Mõistlik on teda hoida stringina, kuna kui sul on vaja saada kätte sugu või sünnikuupäev, siis stringi töötlemine on tunduvalt lihtsam.


Isikukoodi on hea juba seepärast stringina hoida, et eestis tegutsevad isikud ei ole alati eesti isikukoodidega ja muu maailma koodidel esineb koodis ka mittenumbrilisi väärtusi ( põhiliselt sidekriipsud) või nad võivad alata numbriga 0.
Siis pole vaja hoida ka eraldi viiteid isikukoodi päritolule, kuna need võib mitteeesti koodide puhul isikukoodi ette lisada.
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 15.06.2011 23:11:29 vasta tsitaadiga

webromps kirjutas:
DoS kirjutas:
Huvitav oleks teada, miks peaks keegi arvväärtusi baasis stringina hoidma?
Aga kui kiiret lahendust vaja, siis midagi stiilis WHERE coordinates LIKE 'x%' and coordinates LIKE '%y' või siis olenevalt andmetest regexpiga veidi kindlam.

OT:
Oleneb mis arvväärtusi ja milleks sa neid kasutad.
Hea näide isikukood. Mõistlik on teda hoida stringina, kuna kui sul on vaja saada kätte sugu või sünnikuupäev, siis stringi töötlemine on tunduvalt lihtsam.

Nojah, ainult et isikukood ei ole oma olemuselt arv, kuigi välja näeb küll selline. Sama moodi ka näiteks telefoninumber, kontonumber vms.
Mõtlesin ikka selliseid objekte, mis midagi mõõdavad või loendavad.
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  SQL split+otsing
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.