Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Internet > Web razvoj > Serverske aplikacije i baze podataka
Uputstvo Članstvo Kalendar Današnje poruke Pretraži

Serverske aplikacije i baze podataka PHP, Perl, ASP, ASP .NET, ColdFusion...
MySQL, PostgreSQL, MSQL, Oracle...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 3.8.2009, 18:45   #1
srdjan82
Novi član
 
Član od: 3.8.2009.
Poruke: 3
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom 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.
srdjan82 je offline   Odgovor sa citatom ove poruke
Stara 3.8.2009, 20:20   #2
holodoc
Deo inventara foruma
 
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
Određen forumom 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.
holodoc je offline   Odgovor sa citatom ove poruke
Stara 3.8.2009, 20:25   #3
srdjan82
Novi član
 
Član od: 3.8.2009.
Poruke: 3
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom 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!
srdjan82 je offline   Odgovor sa citatom ove poruke
Stara 3.8.2009, 20:35   #4
holodoc
Deo inventara foruma
 
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
Određen forumom Re: sql naredba za prikazivanje podataka

Citat:
srdjan82 kaže: Pregled poruke
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!
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
holodoc je offline   Odgovor sa citatom ove poruke
Stara 4.8.2009, 15:08   #5
srdjan82
Novi član
 
Član od: 3.8.2009.
Poruke: 3
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
Određen forumom 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)
srdjan82 je offline   Odgovor sa citatom ove poruke
Stara 4.8.2009, 22:34   #6
holodoc
Deo inventara foruma
 
Član od: 5.12.2005.
Poruke: 6.785
Zahvalnice: 348
Zahvaljeno 1.893 puta na 1.078 poruka
Određen forumom 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.
holodoc je offline   Odgovor sa citatom ove poruke
Stara 27.1.2010, 3:22   #7
dusandevic
Član
 
Član od: 23.8.2008.
Lokacija: Sremska Mitrovica
Poruke: 105
Zahvalnice: 8
Zahvaljeno 16 puta na 12 poruka
Slanje poruke preko MSN-a korisniku dusandevic Slanje poruke preko Skypea korisniku dusandevic
Određen forumom Re: sql naredba za prikazivanje podataka

Citat:
holodoc kaže: Pregled poruke

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.
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?
dusandevic je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi


Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


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


Sva vremena su po Griniču +2 h. Sada je 17:33.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com