Šta je novo?

sql naredba za prikazivanje podataka

srdjan82

Slavan
Učlanjen(a)
17.11.2007
Poruke
28
Poena
304
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.
 
Jel mora iskljucivo MYSQL kveri ili moze kveri + php kod?
 
u MYSQl-u moze uz pomoc petlji recimo.

U PHP-u to je 10tak redova koda.
 
Mozes li da otkucas tih 10tak redova?

Evo ga jedno od resenja:

<?php
select_db($database_localhost, $localhost);
$query_record = "SELECT * FROM a ORDER BY broj ASC";
$record = mysql_query($query_record, $localhost) or die(mysql_error());
$row_record = mysql_fetch_assoc($record);
$totalRows_record = mysql_num_rows($record);

$brojevi = array();
$i=0;
$r='';
do
{
($row_record['broj']!=$r) ? $i=0: '';
($row_record['znak']=='+') ? $i++: $i--;
($i==3 || $i==-3)? $brojevi[]=$row_record['broj']: '';
$r= $row_record['broj'];
}
while ($row_record = mysql_fetch_assoc($record));


echo " <pre>";
print_r ($brojevi);
echo " </pre>";
?>

Ako sam te razume zelis da vidis samo broj koji ima ponavljajuci znak vise od 3 puta zaredom, pa bez obzira da li se taj broj kasnije opet ponavlja on ce biti izbacen samo jednom.

poz
 
Mala ispavka. Gorenje tvrdjenje nije tacno pa se u nekim slucajevima ponavljaju rezultati. Ispravka na 2 nacina recimo:
1. dodati liniju u glavnom codu:

($row_record['broj']!=$r) ? $i=0: '';

if($i==3 || $i==-3) continue;

($row_record['znak']=='+') ? $i++: $i--;
($i==3 || $i==-3)? $brojevi[]=$row_record['broj']: '';
$r= $row_record['broj'];

2. ili unikovati niz na kraju
$brojevi = array_unique ($brojevi);
poz
 
Izgleda kao dobro.. Svaka cast!

Ja sam promenio
$query_record = "SELECT * FROM a ORDER BY broj ASC";
u
$query_record = "SELECT * FROM a ORDER BY broj, datum ASC";
jer neke rezultate nije izbacivao.

E sad, jel moze nekako da se namesti da kada se taj niz od tri ista znaka prekine novim datumom, sa istim brojem ali razlicitim znakom, da taj broj vise ne ispisuje u razultatu?
 
Poslednja izmena:
Izgleda kao dobro.. Svaka cast!

Ja sam promenio
$query_record = "SELECT * FROM a ORDER BY broj ASC";
u
$query_record = "SELECT * FROM a ORDER BY broj, datum ASC";
jer neke rezultate nije izbacivao.

E sad, jel moze nekako da se namesti da kada se taj niz od tri ista znaka prekine novim datumom, sa istim brojem ali razlicitim znakom, da taj broj vise ne ispisuje u razultatu?

Nisam probavao, i ne znam da li sam dobro shvatio. Dodatni IF uslov.
Petlja ide u novi krug ako naidje na novi datum i novi znak, jer u svakom slucaju novi znak razbija niz od 3, a datum je samo dodatna provera.

$brojevi = array();
$i=0;
$r='';
$d='';
$z='';
do
{
($row_record['broj']!=$r) ? $i=0: '';
if($i==3 || $i==-3) continue;

if($row_record['datum']!=$d && $row_record['znak']!=$z)
{
$r= $row_record['broj'];
$d= $row_record['datum'];
$z= $row_record['znak'];
continue;
}

($row_record['znak']=='+') ? $i++: $i--;
($i==3 || $i==-3)? $brojevi[]=$row_record['broj']: '';
$r= $row_record['broj'];
$d= $row_record['datum'];
$z= $row_record['znak'];
}
while ($row_record = mysql_fetch_assoc($record));
 
Jako dobro, svaka cast.

Jedino mesto gde pravi gresku je ovo:

Kod:
	2009-06-14 	 	54 	-
	2009-06-21 	 	54 	+
	2009-07-12 	 	54 	+
	2009-07-12 	 	54 	+
	2009-07-26 	 	54 	-
	2009-07-26 	 	54 	+
	2009-08-02 	 	54 	+
	2009-06-13 	 	55 	-

Izbacio je 54 kao rezultat a on nije u nizu. Verovatno zbog toga sto se datum ponavlja. Kao sto vidis 2009-07-26 ima dva unosa pod istim brojem, jedan pozitivni i jedan negativni. Izgleda da zanemaruje ovaj negativni i tada postoji niz.
Koji bi tu dodatni if uslov išao....?!?!
 
Moguce da sam propustio prosli put da upisem i vracanje $i na nulu u if uslovu

if($row_record['datum']!=$d && $row_record['znak']!=$z)
{
$r= $row_record['broj'];
$d= $row_record['datum'];
$z= $row_record['znak'];
$i=0;
continue;
}
Valjda sad radi kako treba.
poz
 
Ipak ne valja.. Kada sam ubacio nove podatke u tabelu, skroz je izbacio bezveze rezultate. Neka, nije ni bitno, a tebi u svakom veliko hvala.
 
Nazad
Vrh Dno