praegune kellaaeg 20.06.2025 18:00:23
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
raitl
HV veteran

liitunud: 20.01.2002
|
11.06.2011 21:47:43
SQL split+otsing |
|
|
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 |
|
 |
DoS
HV veteran

liitunud: 19.08.2002
|
11.06.2011 22:21:20
|
|
|
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 |
|
 |
19Mart94
HV kasutaja
liitunud: 22.06.2010
|
11.06.2011 23:00:13
|
|
|
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
|
|
Kommentaarid: 33 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
31 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
12.06.2011 13:12:10
|
|
|
Mõistlik oleks oma andmemudel ikka ümber teha, ega see elu sul ilusamaks ei lähe, kui süsteem areneb ja täieneb.
Aga hetkel, kui on vaja mõlema koordinaadi järgi korraga otsida, siis oleks optimaalsem ehk isegi niimoodi:
sql:
|
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. 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 |
|
 |
raitl
HV veteran

liitunud: 20.01.2002
|
12.06.2011 15:12:28
|
|
|
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 |
|
 |
webromps
HV kasutaja
liitunud: 13.06.2005
|
13.06.2011 13:33:27
|
|
|
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 |
|
 |
wiinanina
HV kasutaja
liitunud: 27.02.2003
|
15.06.2011 19:33:40
|
|
|
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 |
|
 |
DoS
HV veteran

liitunud: 19.08.2002
|
15.06.2011 23:11:29
|
|
|
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 |
|
 |
|
lisa lemmikuks |
|
|
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.
|