Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 3 odgovora
  • 2.026 pregleda

Najnovija ↓

pomoc oko upita za podudaranje podataka 14.05.2009. u 17:10 · pre 212 meseci #1
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
Re: pomoc oko upita za podudaranje podataka 14.05.2009. u 21:03 · pre 212 meseci #2
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
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Re: pomoc oko upita za podudaranje podataka 15.05.2009. u 09:26 · pre 212 meseci #3
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)
Potpis
arhimed
http://www.mysql.rs/ | http://elco.crsndoo.com/
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme