|
Serverske aplikacije i baze podataka PHP, Perl, ASP, ASP .NET, ColdFusion... MySQL, PostgreSQL, MSQL, Oracle... |
|
Alatke vezane za temu | Vrste prikaza |
3.8.2009, 18:45 | #1 |
Novi član
Član od: 3.8.2009.
Poruke: 3
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
SQL naredba za prikazivanje podataka
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. |
3.8.2009, 20:20 | #2 |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
|
Re: sql naredba za prikazivanje podataka
Ovo teško ili skoro nikako ne može da se izvede u čistom SQLu a ponajmanje putem "neke" komande Imaš dve opcije. Prva je da napišeš skladištenu proceduru (stored procedure) koja će odraditi ceo posao u okviru bloka SQL komandi a drugi je da iskoristiš neki od serverski orijentisanih programskih jezika kao recimo PHP.
Moja iskrena preporuka je da iskoristiš drugu varijantu jer bi u slučaju skladištenih procedura morao da imaš jako veliki broj ugnježdenih podupita što bi se pogubno odrazilo po performanse aplikacije. U PHPu bi recimo bilo potrebno da učitaš sadržaj kompletne baze u neki niz recimo (a ako je količina podataka velika mogu se recimo učitavati nizovi od 100-200 redova) i onda za svaki od učitanih redova proveriti da li sledeća dva ispunjavaju uslov. Relativno laka skripta za napraviti. |
3.8.2009, 20:25 | #3 |
Novi član
Član od: 3.8.2009.
Poruke: 3
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
Re: sql naredba za prikazivanje podataka
Hvala na odgovoru. Bilo mi je i sumnjivo da se ovako nesto moze izvesti u Mysql-u. Ali toliko fascinantnih primera sam video da sam pomislio: "što da ne".
Fokusiracu se na PHP. Hvala jos jednom! |
3.8.2009, 20:35 | #4 |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
|
Re: sql naredba za prikazivanje podataka
Problem je u specifičnosti tvojih zahteva odnosno u tome što pokušavaš da za bukvalno svaki od zapisa u tabeli uradiš upoređivanja trenutno posmatranih podataka sa zapisima koji su u nekim drugim redovima. Tu ti ne ginu podupiti. SQL jeste jako moćan ali neke stvari se jednostavno ne isplate da se rade i mnogo ih je lakše uraditi nekim serverskim jezikom. Ne treba preterivati sa biznis logikom u okviru baza podataka
|
4.8.2009, 15:08 | #5 |
Novi član
Član od: 3.8.2009.
Poruke: 3
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
Re: sql naredba za prikazivanje podataka
Ako nekoga interesuje, evo ga rešenje:
Kod:
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) Kod:
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 | +-------+------+------+------+------+------+------+------+------+ Kod:
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) |
4.8.2009, 22:34 | #6 |
Deo inventara foruma
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
|
Re: sql naredba za prikazivanje podataka
Ala si ga zakomplikovao Iskreno da ti kažem pogubio sam se negde u pola u tvojoj logici ali nebitno. Ja i dalje ne bih koristio SQL za obradu podataka u ovom slučaju.
Usput...Izbegavaj SELECT * jer ga iskusni RDBMS designeri smatraju najvećim mogućim zlom kada su performanse upita u pitanju. Navedi tačne nazive kolona. |
27.1.2010, 3:22 | #7 |
Član
|
Re: sql naredba za prikazivanje podataka
Da li to znači da ako u upitu želim da prikažem sve atribute tabele ipak treba da navodim imena atribura umesto *? Ili si mislio da ipak dobro razmislimo i selektujemo samo kolone koje će nam trebati?
|
Bookmarks sajtovi |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Sporo kopiranje podataka na HD-u. Misterija... | MiDa | Kvarovi | 6 | 12.1.2010 19:00 |
Kratko i jasno: da li je Joomli moguće menjati SQL bazu... | Teva | Web razvoj | 1 | 20.9.2009 23:59 |
Zamena za MS Access razvojno okruženje - MySQL | Jenkiduduldu | Serverske aplikacije i baze podataka | 7 | 13.8.2009 22:45 |
SQL Server 2000 | Zoran035 | Programiranje | 2 | 18.10.2007 13:23 |
Kakvu vrstu "inputa" preferirate pri unosu podataka u bilo koju bazu podataka? | Branislav Gavric | Aplikativni softver | 9 | 27.11.2006 16:31 |