Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

pomoc oko upita za podudaranje podataka

[es] :: MySQL :: pomoc oko upita za podudaranje podataka

[ Pregleda: 1405 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

drugtito
Milovan Djilas

Član broj: 138118
Poruke: 56
77.46.208.*



+1 Profil

icon pomoc oko upita za podudaranje podataka14.05.2009. u 16:10 - pre 181 meseci
Pozdrav,
treba mi pomoc oko upita koji glasi:
Kako da nadjem odredjenu kombinaciju (nekoliko recimo 5-6)
rekorda koji su (ako ne isti) naj-slicniji po podacima.
Recimo polja u tabeli su:

>>> Ime, Prezime, GodinaRodj, Pol, Diplomirao, Tema, Ocena, StartST, <<<

E sad upit bi trebao da izbaci kao rezultat one rekorde koji imaju
najvise slicnosti (najvise ISTIH podataka) sa rekordom koji se uporedjuje.
Totalno ne-bitno za raspored polja. Znaci polja su ni od kakve vaznosti
samo broj istih rezultata. Znaci ako je negde isto:

Tema, Ocena, Pol, Diplomirao, StartST sa rekordom koji se uporedjuje
i to je broj sa najvise podudarnosti, to bi trebalo da bude u rezultatu.

Znaci ne serija upita i view-a nego da li je i ako je kako je moguce napraviti
jedan jedini upit sa kojim bih to mogao dobiti.

Najlepse hvala
Pozdrav
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: pomoc oko upita za podudaranje podataka14.05.2009. u 20:03 - pre 181 meseci
Citat:

rekorda koji su (ako ne isti) naj-slicniji po podacima.


po sql standardu - nikako

teoretski nesto bi moglo da se izmajmunise ali bi morao da definises sta znaci "slican"

Citat:

E sad upit bi trebao da izbaci kao rezultat one rekorde koji imaju
najvise slicnosti (najvise ISTIH podataka) sa rekordom koji se uporedjuje.


:D ...


moze da se izvede nesto ovako ali ... da li ce raditi i sutra :)

Code:

mysql> create table t1 (a int, b int, c int, d int);
Query OK, 0 rows affected, 2 warnings (0.02 sec)

mysql> insert into t1 values (1,2,3,4), (1,10,3,4), (1, 10,10,4), (1,10,10,10), (10,10,10,10);
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> SELECT IF(a=1,@res:=1,@res:=0) AS nebitnoA, IF(b=2,@res:=@res+1, 0) AS nebitnoB, IF(c=3,@res:=@res+1, 0) AS nebitnoC, IF(d=4,@res:=@res+1,0) AS nebitnoD, @res FROM t1 order by @res DESC;
+----------+----------+----------+----------+------+
| nebitnoA | nebitnoB | nebitnoC | nebitnoD | @res |
+----------+----------+----------+----------+------+
|        1 |        2 |        3 |        4 |    4 | 
|        1 |        0 |        2 |        3 |    3 | 
|        1 |        0 |        0 |        2 |    2 | 
|        1 |        0 |        0 |        0 |    1 | 
|        0 |        0 |        0 |        0 |    0 | 
+----------+----------+----------+----------+------+
5 rows in set (0.00 sec)


sta je fora .. ove "nebitno?" varijable ti ne trebaju ni za sta u rezultatu ... mozes da ih iskoristis ako te bas zanimaju ali bolje nemoj :) .... u @res ti se za svaki slog nalazi "koliko kolona si pogodio" .. sortirano ti je od "najblizeg" rezultata ka losijim ...

pogledaj http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
Code:

mysql>  SET @t1=0, @t2=0, @t3=0;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2:=@t2+10,@t3;
+----------------------+------+-------------+------+
| @t1:=(@t2:=1)+@t3:=4 | @t1  | @t2:=@t2+10 | @t3  |
+----------------------+------+-------------+------+
|                    5 |    5 |          11 |    4 | 
+----------------------+------+-------------+------+
1 row in set (0.01 sec)


cisto da vidis kako to sljaka
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: pomoc oko upita za podudaranje podataka15.05.2009. u 08:26 - pre 181 meseci
videh pitanje u drugoj temi koje ti isti "treba" .. posto ljudi ne citaju http://dev.mysql.com/doc/refman/5.1/en/select.html ..

Citat:

The SQL standard requires that HAVING must reference only columns in the GROUP BY clause or columns used in aggregate functions. However, MySQL supports an extension to this behavior, and allows HAVING to refer to columns in the SELECT list and columns in outer subqueries as well.

If the HAVING clause refers to a column that is ambiguous, a warning occurs. In the following statement, col2 is ambiguous because it is used as both an alias and a column name:


i primer u tvom slucaju (da pokupi samo slogove koji imaju bar jedan isti item)

Code:

mysql> SELECT IF(a=1,@res:=1,@res:=0) AS nebitnoA, IF(b=2,@res:=@res+1, 0) AS nebitnoB, IF(c=3,@res:=@res+1, 0) AS nebitnoC, IF(d=4,@res:=@res+1,0) AS nebitnoD, @res AS slicnost FROM t1 having slicnost > 0  ORDER BY @res DESC;
+----------+----------+----------+----------+----------+
| nebitnoA | nebitnoB | nebitnoC | nebitnoD | slicnost |
+----------+----------+----------+----------+----------+
|        1 |        2 |        3 |        4 | 4        | 
|        1 |        0 |        2 |        3 | 3        | 
|        1 |        0 |        0 |        2 | 2        | 
|        1 |        0 |        0 |        0 | 1        | 
+----------+----------+----------+----------+----------+
4 rows in set (0.02 sec)

 
Odgovor na temu

drugtito
Milovan Djilas

Član broj: 138118
Poruke: 56
77.46.208.*



+1 Profil

icon Re: pomoc oko upita za podudaranje podataka15.05.2009. u 11:34 - pre 181 meseci
Hvala na odgovorima
 
Odgovor na temu

[es] :: MySQL :: pomoc oko upita za podudaranje podataka

[ Pregleda: 1405 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.