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

sql naredba za prikazivanje podataka

[es] :: MySQL :: sql naredba za prikazivanje podataka

[ Pregleda: 1993 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

SrdjanS.

Član broj: 101282
Poruke: 13
81.18.49.*



Profil

icon sql naredba za prikazivanje podataka03.08.2009. u 16:27 - pre 179 meseci
Poštovanje svima..

Da li ima neko ko može da mi pomogne. Tražim jednu naredbu za prihvatanje podataka iz Mysql tabele.
Imam tabelu "neka_tabela" i u njoj kolone DATUM, BROJ, ZNAK. Datum predstavlja vreme kada je podatak unesen u tabelu. Znak u tabeli moze biti samo + i - (plus i minus), a brojevi su neki brojevi od 50 do 100. Podaci se u tabelu unose, jedan datum, jedan broj, jedan znak.
Meni treba naredba sa kojom cu prikazati BROJ koji ima vrednost od tri uzastopna unesena ista znaka, npr. minusa(-).
Recimo sledece podatke imam u tabeli:
12.10. 50 -
13.10. 52 +
14.10. 66 -
15.10. 50 -
16.10. 50 +
17.10. 66 -
18.10. 66 -
19.10. 50 -

Kao ste se vidi, broj 66 ima tri uzastopne minus(-) vrednosti. A 50 ima tri minus(-) vrednosti ali one nisu uzastopne.
Dakle, potrebna mi je naredba koja ce iz ove kolone izvuci jedino broj 66 kao rezultat.

[Ovu poruku je menjao SrdjanS. dana 03.08.2009. u 18:17 GMT+1]
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: sql naredba za prikazivanje podataka03.08.2009. u 20:05 - pre 179 meseci
ovo neko kockanje?

kako god okrenes moraces "ORDER BY datum" ... e sad .. sta ako imas njih 10 sa istim datumom kada su uneseni? u tom slucaju mozes da razmislis o "ORDER BY datum, znak" ili da ostavis samo "ORDER BY datum" ... ne racunaj da ce ti mysql vratiti rezultate po redu kojim su ubacivani tako da je to prva stvar koji treba da odlucis ...

dalje ..

Code:

mysql> create table t1 (datum int auto_increment primary key, broj int, znak char(1)) engine=myisam;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> insert into t1 (broj, znak) values (rand()*100, '-'),  (rand()*100, '-'), (rand()*100, '+'), (rand()*100, '-'), (rand()*100, '-'), (rand()*100, '+'), (rand()*100, '+'), (rand()*100, '-'), (rand()*100, '-'), (rand()*100, '-'), (rand()*100, '+'), (rand()*100, '+'), (rand()*100, '+'), (rand()*100, '-'), (rand()*100, '+'), (rand()*100, '-'), (rand()*100, '-'), (rand()*100, '-'), (rand()*100, '+'), (rand()*100, '-'), (rand()*100, '+'), (rand()*100, '-'), (rand()*100, '-'), (rand()*100, '-'), (rand()*100, '+'), (rand()*100, '+'), (rand()*100, '-');

Query OK, 27 rows affected (0.00 sec)
Records: 27  Duplicates: 0  Warnings: 0


mysql> select * from t1;
+-------+------+------+
| datum | broj | znak |
+-------+------+------+
|     1 |   71 | -    | 
|     2 |   59 | -    | 
|     3 |   81 | +    | 
|     4 |   28 | -    | 
|     5 |   97 | -    | 
|     6 |    0 | +    | 
|     7 |   12 | +    | 
|     8 |   57 | -    | 
|     9 |   48 | -    | 
|    10 |   72 | -    | 
|    11 |   15 | +    | 
|    12 |   59 | +    | 
|    13 |   52 | +    | 
|    14 |   82 | -    | 
|    15 |   54 | +    | 
|    16 |   25 | -    | 
|    17 |   60 | -    | 
|    18 |   28 | -    | 
|    19 |   60 | +    | 
|    20 |   14 | -    | 
|    21 |   92 | +    | 
|    22 |   19 | -    | 
|    23 |   17 | -    | 
|    24 |   30 | -    | 
|    25 |   98 | +    | 
|    26 |    1 | +    | 
|    27 |   11 | -    | 
+-------+------+------+
27 rows in set (0.00 sec)



to mu dodje startna pozicija ... sad treba da izvedes to sto ti hoces .. ovako izvadis podatke koji ti trebaju (c=znak, b=znak(-1), a=znak(-2))

Code:


mysql> select * , @zzz:=@zz a, @zz:=@z b, @z:=znak c from t1 order by datum, znak;
+-------+------+------+------+------+------+
| datum | broj | znak | a    | b    | c    |
+-------+------+------+------+------+------+
|     1 |   71 | -    | NULL | NULL | -    | 
|     2 |   59 | -    | NULL | -    | -    | 
|     3 |   81 | +    | -    | -    | +    | 
|     4 |   28 | -    | -    | +    | -    | 
|     5 |   97 | -    | +    | -    | -    | 
|     6 |    0 | +    | -    | -    | +    | 
|     7 |   12 | +    | -    | +    | +    | 
|     8 |   57 | -    | +    | +    | -    | 
|     9 |   48 | -    | +    | -    | -    | 
|    10 |   72 | -    | -    | -    | -    | 
|    11 |   15 | +    | -    | -    | +    | 
|    12 |   59 | +    | -    | +    | +    | 
|    13 |   52 | +    | +    | +    | +    | 
|    14 |   82 | -    | +    | +    | -    | 
|    15 |   54 | +    | +    | -    | +    | 
|    16 |   25 | -    | -    | +    | -    | 
|    17 |   60 | -    | +    | -    | -    | 
|    18 |   28 | -    | -    | -    | -    | 
|    19 |   60 | +    | -    | -    | +    | 
|    20 |   14 | -    | -    | +    | -    | 
|    21 |   92 | +    | +    | -    | +    | 
|    22 |   19 | -    | -    | +    | -    | 
|    23 |   17 | -    | +    | -    | -    | 
|    24 |   30 | -    | -    | -    | -    | 
|    25 |   98 | +    | -    | -    | +    | 
|    26 |    1 | +    | -    | +    | +    | 
|    27 |   11 | -    | +    | +    | -    | 
+-------+------+------+------+------+------+
27 rows in set (0.00 sec)




i sad to pokupis kroz subselect i radis sta oces (da se ne bi smarao sa HAVING posto je to mnooooogo sporo

Code:

mysql> set @zzz=NULL;  set @zz=NULL; set @z=NULL;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> select datum, broj, znak from ( select * , @zzz:=@zz a, @zz:=@z b, @z:=znak c from t1 order by datum, znak) t where t.a=t.b and t.a=t.c;
+-------+------+------+
| datum | broj | znak |
+-------+------+------+
|    10 |   72 | -    | 
|    13 |   52 | +    | 
|    18 |   28 | -    | 
|    24 |   30 | -    | 
+-------+------+------+
4 rows in set (0.00 sec)



jasno?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: sql naredba za prikazivanje podataka03.08.2009. u 20:10 - pre 179 meseci
moguce (nisi bas najbolje objasnio) .. da ti treba

Code:

order by broj, datum


ali generalno ... to ti je koncept, dalje valjda mozes sam

 
Odgovor na temu

SrdjanS.

Član broj: 101282
Poruke: 13
81.18.49.*



Profil

icon Re: sql naredba za prikazivanje podataka03.08.2009. u 21:49 - pre 179 meseci
Nije dobro...

Tvoj kod pokazuje BROJ koji je treci u nizu brojeva sa istim znakom, a ne BROJ koji je treci u nizu brojeva sa istim znakom ali i pod istim BROJEM.

Dakle, da pojasnim...
Ovo je deo tvog koda:

| 7 | 12 | + | - | + | + |
| 8 | 57 | - | + | + | - |
| 9 | 48 | - | + | - | - |
| 10 | 72 | - | - | - | - |
| 11 | 15 | + | - | - | + |
| 12 | 59 | + | - | + | + |
| 13 | 52 | + | + | + | + |
| 14 | 82 | - | + | + | - |
| 15 | 54 | + | + | - | + |
| 16 | 25 | - | - | + | - |

on pokazuje da se npr. pre broja 25 (koji ima znak minus), nalazi broj sa znakom + (broj 54), a pre njega broj sa znakom - (broj 82).

Ono sto ja zelim da postignem jeste ovako nesto:

| 7 | 12 | + | - | + | + |
| 8 | 57 | - | + | + | - |
| 9 | 48 | - | + | - | - |
| 10 | 72 | - | - | - | - |
| 11 | 25 | - | - | - | - |
| 12 | 59 | + | - | + | + |
| 13 | 52 | + | + | + | + |
| 14 | 25 | - | - | - | - |
| 15 | 54 | + | + | - | + |
| 16 | 25 | - | - | - | - |

dakle, u redu pod brojem 25 stoje sve znaci minus sto govori da je prethodni broj 25 (koji se nalazi u redu 14) takođe negativnog znaka, kao još jedan broj 25 (u redu 11) pre njega.

Mislim da je sada jasnije?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: sql naredba za prikazivanje podataka03.08.2009. u 22:08 - pre 179 meseci
jasnije je .. isti princip .. mogao si da probas sam ..

Code:

mysql> create table t1 (datum int auto_increment primary key, broj int, znak char(1)) engine=myisam;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> insert into t1 (broj, znak) values 
    -> (12, '+'),
    -> (57, '-'),
    -> (48, '-'),
    -> (72, '-'),
    -> (25, '-'),
    -> (59, '+'),
    -> (52, '+'),
    -> (25, '-'),
    -> (54, '+'),
    -> (25, '-'),
    -> (5, '+'),
    -> (6, '+'),
    -> (5, '+'),
    -> (7, '+'),
    -> (5, '+'),
    -> (43, '-'),
    -> (23, '+'),
    -> (23, '-'),
    -> (12, '+'),
    -> (56, '-'),
    -> (96, '+'),
    -> (44, '-'),
    -> (43, '+');
Query OK, 23 rows affected (0.00 sec)
Records: 23  Duplicates: 0  Warnings: 0
mysql> select * from t1;
+-------+------+------+
| datum | broj | znak |
+-------+------+------+
|     1 |   12 | +    | 
|     2 |   57 | -    | 
|     3 |   48 | -    | 
|     4 |   72 | -    | 
|     5 |   25 | -    | 
|     6 |   59 | +    | 
|     7 |   52 | +    | 
|     8 |   25 | -    | 
|     9 |   54 | +    | 
|    10 |   25 | -    | 
|    11 |    5 | +    | 
|    12 |    6 | +    | 
|    13 |    5 | +    | 
|    14 |    7 | +    | 
|    15 |    5 | +    | 
|    16 |   43 | -    | 
|    17 |   23 | +    | 
|    18 |   23 | -    | 
|    19 |   12 | +    | 
|    20 |   56 | -    | 
|    21 |   96 | +    | 
|    22 |   44 | -    | 
|    23 |   43 | +    | 
+-------+------+------+
23 rows in set (0.00 sec)


jel ovo trazis:
Code:

mysql> set @zzz=NULL;  set @zz=NULL; set @z=NULL; set @nnn=NULL; set @nn=NULL; set @n=NULL;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> select * , @zzz:=@zz a, @zz:=@z b, @z:=znak c, @nnn:=@nn d, @nn:=@n e, @n:=broj f from t1 order by broj,datum,znak;
+-------+------+------+------+------+------+------+------+------+
| datum | broj | znak | a    | b    | c    | d    | e    | f    |
+-------+------+------+------+------+------+------+------+------+
|    11 |    5 | +    | NULL | NULL | +    | NULL | NULL |    5 | 
|    13 |    5 | +    | NULL | +    | +    | NULL |    5 |    5 | 
|    15 |    5 | +    | +    | +    | +    |    5 |    5 |    5 | 
|    12 |    6 | +    | +    | +    | +    |    5 |    5 |    6 | 
|    14 |    7 | +    | +    | +    | +    |    5 |    6 |    7 | 
|     1 |   12 | +    | +    | +    | +    |    6 |    7 |   12 | 
|    19 |   12 | +    | +    | +    | +    |    7 |   12 |   12 | 
|    17 |   23 | +    | +    | +    | +    |   12 |   12 |   23 | 
|    18 |   23 | -    | +    | +    | -    |   12 |   23 |   23 | 
|     5 |   25 | -    | +    | -    | -    |   23 |   23 |   25 | 
|     8 |   25 | -    | -    | -    | -    |   23 |   25 |   25 | 
|    10 |   25 | -    | -    | -    | -    |   25 |   25 |   25 | 
|    16 |   43 | -    | -    | -    | -    |   25 |   25 |   43 | 
|    23 |   43 | +    | -    | -    | +    |   25 |   43 |   43 | 
|    22 |   44 | -    | -    | +    | -    |   43 |   43 |   44 | 
|     3 |   48 | -    | +    | -    | -    |   43 |   44 |   48 | 
|     7 |   52 | +    | -    | -    | +    |   44 |   48 |   52 | 
|     9 |   54 | +    | -    | +    | +    |   48 |   52 |   54 | 
|    20 |   56 | -    | +    | +    | -    |   52 |   54 |   56 | 
|     2 |   57 | -    | +    | -    | -    |   54 |   56 |   57 | 
|     6 |   59 | +    | -    | -    | +    |   56 |   57 |   59 | 
|     4 |   72 | -    | -    | +    | -    |   57 |   59 |   72 | 
|    21 |   96 | +    | +    | -    | +    |   59 |   72 |   96 | 
+-------+------+------+------+------+------+------+------+------+



tj ... tri uzastopna broja koja imaju isti znak dakle:

Code:

mysql> set @zzz=NULL;  set @zz=NULL; set @z=NULL; set @nnn=NULL; set @nn=NULL; set @n=NULL;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> select datum, broj, znak from 
    -> ( select * , @zzz:=@zz a, @zz:=@z b, @z:=znak c, @nnn:=@nn d, @nn:=@n e, @n:=broj f from t1 order by broj, datum, znak) t
    -> where 
    -> t.a=t.b and t.a=t.c -- tri zadnja znaka ista
    -> and
    -> t.d=t.e and t.d=t.f -- tri zadnja broja ista
    -> ;
+-------+------+------+
| datum | broj | znak |
+-------+------+------+
|    15 |    5 | +    | 
|    10 |   25 | -    | 
+-------+------+------+
2 rows in set (0.00 sec)



jel sad to sto si trazio?

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: sql naredba za prikazivanje podataka03.08.2009. u 22:17 - pre 179 meseci
> Mozda ovo ne moze bez PHP-a?

:D .. isto kao sto bi ga napisao u php-u mozes da ga uradis u sql-u
 
Odgovor na temu

SrdjanS.

Član broj: 101282
Poruke: 13
81.18.49.*



Profil

icon Re: sql naredba za prikazivanje podataka03.08.2009. u 22:18 - pre 179 meseci
Citat:
bogdan.kecman: mogao si da probas sam ..


I jesam, ali nisam uspeo!

Izgleda da je to! Hvala ti, mnogo! Mislio sam da cu doci sam do resenja, a sada vidim da nikada ne bih uspeo..


Car si!
 
Odgovor na temu

SrdjanS.

Član broj: 101282
Poruke: 13
81.18.49.*



Profil

icon Re: sql naredba za prikazivanje podataka03.08.2009. u 22:20 - pre 179 meseci
Citat:
bogdan.kecman: > Mozda ovo ne moze bez PHP-a?

:D .. isto kao sto bi ga napisao u php-u mozes da ga uradis u sql-u


Naravno!

Jedan decko me je zbunio tom recenicom i ako ga nisam bas shvatio!??!?! ;)
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: sql naredba za prikazivanje podataka03.08.2009. u 22:47 - pre 179 meseci
filozofija je jednostavna ... sortiras ih, zapamtis ternutnu i prethodne dve vrednosti i to je to .. imas ih "poredjane" i samo proveris dal su isti ili ne ... najveca filozofija je da odradis sort tako da dobijes rezultat koji ocekujes ...

isto to bi radio i u php-u ..

drugi nacin bi bio (i bio bi zgodniji da trazis vise od 3 uzastopna znaka) da brojis uzastopne znake .. nesto tipa if(znak='+',@plus:=@plus+1,@plus:=0)... al .. to je za neki drugi put :)
 
Odgovor na temu

SrdjanS.

Član broj: 101282
Poruke: 13
*.neobee.net.



Profil

icon Re: sql naredba za prikazivanje podataka09.08.2009. u 17:14 - pre 179 meseci
Imam još jedno pitanje, ako želiš da pomogneš.

Ovako si zapamtio trenutnu i prethodne dve vrednosti:
Code:
mysql> select * , @zzz:=@zz a, @zz:=@z b, @z:=znak c from t1 order by datum, znak;


A kako bi zapamtio trenutnu, prethodne dve i sledeću vrednost?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: sql naredba za prikazivanje podataka09.08.2009. u 18:05 - pre 179 meseci
ne mozes da zapamtis sledecu vrednost posto jos nisi dosao do nje
 
Odgovor na temu

SrdjanS.

Član broj: 101282
Poruke: 13
*.neobee.net.



Profil

icon Re: sql naredba za prikazivanje podataka09.08.2009. u 18:13 - pre 179 meseci
Citat:
bogdan.kecman: ne mozes da zapamtis sledecu vrednost posto jos nisi dosao do nje


Aha.. Hvala.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: sql naredba za prikazivanje podataka09.08.2009. u 18:30 - pre 179 meseci
uvek mozes da nacukas stored proceduru ... dobices malo vecu slobodu nego sa cistim sql-om.... mozes da pamtins za "sve" atribute prethodnu vrednost a za ove "jednu vise" pa onda koristis to kao "trenutni" a ono sto je trenutni koristis kao "sledeci" .. mada .. koliko god to "moze da se zvbudzi" .. ili napise u stored proceduri .. nesto u samom konceptu ti tu nije ok ...
 
Odgovor na temu

SrdjanS.

Član broj: 101282
Poruke: 13
*.ADSL.neobee.net.



Profil

icon Re: sql naredba za prikazivanje podataka10.08.2009. u 14:44 - pre 179 meseci
Ono što sam želeo da postignem je to da ako dodje do prekida rezultata sa istim datumom, brojem ali razlicitim znakom da taj rezultat ne prikazuje. Zato sam mislio da nekako uvedem sledecu vrednost...
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: sql naredba za prikazivanje podataka10.08.2009. u 20:47 - pre 179 meseci
vidim ja da je neko kladjenje u pitanju :D

ko sto rekoh, jedini nacin da uvedes "sledecu vrednost" je da sve ostale pomeris za jedan unazad te onda imas tu "sledecu" kao trenutnu a one "trenutne" kao "malopre" :) ... to ce da radi ok, nije problem, ali ce da bude ruuuuuuuzan sql do prekosutra tako da je onda bolje da napravis neki stored procedure koji to pravi koji trci sa kuisorom preko te tabele ... radi to sto ti treba .. mozda cak napravis i brze iz nekoliko upita i temporary tabelama nego ovako sa ovim forama sa varijablama u upitu :D... za to "kako" da uradis tu stored proceduru ja ne da ti pomognem, stvorio sam neku odbojnost prema njima i mnoogo izbegavam da radim sa njima ... cisto filozofsko razilazenje gde znam da ja nisam u pravu al teram inat...


 
Odgovor na temu

[es] :: MySQL :: sql naredba za prikazivanje podataka

[ Pregleda: 1993 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

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