View Full Version : MySQL-rowsi iz 2 tablice,kronoloski poredani?
pozdrav.
radim na jednom php-mysql projektu i imam jedan problem.imam 2 tablice:
tbl1=events
tbl2=exercise
broj kolumna je razlicit za obe tablice, ali zato obje imaju 5 kolumne sa jednakim imenom.
km_start, km_finish, dat_start,dat_finish, reg.
da li je moguce napraviti output u browseru kroz php, koji bi prikazao rowse iz obje tablice kronoloski poredane za stavku "reg" (WHERE reg='$reg') . Naravno, to bi bilo sve vizualno smjesteno u jednu tablicu u web browseru.
da li je to uopce moguce napraviti?
ako je, da li tih 5 kolumna ,oraju bit jednako imenovane
Is it possible to do that anyway?
..if it is,does the column names have to be the same in those two tables?
hvala na odgovoru
Vrlo jednostavno.
SELECT events.km_start, events.km_finish, events.dat_start, events.dat_finish, events.reg exercise.km_start, exercise.km_finish, exercise.dat_start, exercise.dat_finish, exercise.reg FROM events, exercise, WHERE events.reg='$reg' ORDER BY events.dat_finish
P.S. Da ti ne bude prejednostavno stavio sam par grešaka u kod. :)
Asti misha.
I to je to. nisam mislio da je tako jednostavno.Aj probat cu.Pa javim rezultate.
hvala na brzini i ucinkovitosti. Morat cu pocet malo cesce koristit znanje webmajstor kolektiva.
hvala jos jednom.
probao ovo gore pa mi ne radi.
ali ovaj kod bi isao ovako nekako...izbacio sam ove neke varijable radi lakseg pisanja i pracenja primjera
$reg='xxxx';
$query="SELECT exercise.datum_finish, exercise.km_finish, exercise.reg,
events.datum_finish, events.km_finish, events.reg
FROM events, exercise WHERE exercise.reg='$reg'
ORDER BY events.km_finish";
$result=mysql_query($query);
$num=mysql_numrows($result);
<?
$i=0;
while ($i < $num) {
$km_back=mysql_result($result,$i,"km_back");
$datum_back=mysql_result($result,$i,"datum_back");
$reg=mysql_result($result,$i,"reg");
?>
odi ide kod koji formira tablicu: npr ovako nesto..
--------------------------------------------------------------------
reg : datum finish: km finish
-------------------------------------------------------------------
<? echo $reg; ?> <? echo $datum_finishk; ?> <? echo $km_finish; ?>
<?
$i++;
}
mysql_close();
?>
ali ima jedan problem u vezi toga.
PROBLEM=
za reg xxxx u tabliici EVENTS imam 2 stavke a u tablici EXERCISE samo jednu stavku.
$num varijabla mi daje rezultat 3, sto je u redu, ali prilikom listinga isti row mi se ponavlja 3 puta. tj. unutra su uneseni isti podaci za datum, km.
poanta mi je dobiti tablicu koja ce kronoloski biti ispisana. za jedan $reg imam podatke za vise events-a i vise exercise-a u dvije tablice.npr.zelim dobit ovo:
tbl za reg=xxxx
22.2.2005 event br555 12000
15.2.2005 event br123 11500
29.1.2005 exercise br23 10000
..
.
itd.
klikom na br... mogu vidit detalje vezane za event ili exercise.
mozda bi rjesenje bilo u dodatnoj petlji unutar while petlje koja bi usporedjivala datume iz obje tablice.
ako ima koja nadopuna, cekam i zahvaljujem.
pozdrav
$num varijabla mi daje rezultat 3, sto je u redu, ali prilikom listinga isti row mi se ponavlja 3 puta. tj. unutra su uneseni isti podaci za datum, km.
Upotrebi DISTINCT posle SELECT da bi eliminisao duplikate u koloni u kojoj se javljaju, ako je samo to problem.
Pozdrav
ciao
evo ovako. rijesio problem na malo drugaciji nacin. yaobilaynim putem.
1. napravio novu tablicu
2. select trazene podatke iz tabl. events i upisao ih u ovu tablicu
3. select druge podatke iz tbl. exercise i opet ih upisao u novu tablicu
ynaci imam novu tablicu punu novih podataka. yakon.
4. select*from new_table where...
5. output u html kod.
6. na kraju, a jos uvijek prije mzsql-close, dao naredbu: delete from new_table.
tako da mi prilikom refresha ne upisuje opet iste podatke, pa opet iste.
problem rijesen. iako vjerojatno postoji jednostavnije rjesenje, ako tko yna neka kaze.
druga stvar.
kako prisilit mysql mi autoincrease stvarno bude od yadnjeg broja koji je stvarno u tablici, a ne onog koji je maximalan bio. postoji li koja funkcija za to da ja ne izmisljam toplu vodu.
webmajstori, hvala
Sta podrazumevas pod zadjim a sta pod max. brojem?
Stavis:
SET insert_id = #;
gde je # sledeca auto increment vrednost koju hoces da koristis, sledeci upit(INSERT) koristice tu vrednost.
Pozdrav
znaci da moram za svaki upis raditi i insert_id=#.
a ovo sta me muci je sljedece:
npr. imam upisanih 20 rowsa u tbl.
-izbrisem rowse gdje je id=1,2,3,16,17,18,19,20...
logicna stvar bi mi bila da se u tom slucaju ID-ovi svi pomaknu i lipo se poredaju od id=1 do id=koliko ima unosa.
ovako, na sljedeci unos id ce mi bit 21, bez obzira sto mi je id=..19,20 izbrisan.
pa me to malo i zivcira pomalo.
----------
..
a za ovo od prije sa dvi tablice...sta mislite je li to dobro rjesenje? Posto ne znam za bolje a ovo funkcionira, cini mi se zakon..
aj
logicna stvar bi mi bila da se u tom slucaju ID-ovi svi pomaknu i lipo se poredaju od id=1 do id=koliko ima unosa.
ovako, na sljedeci unos id ce mi bit 21, bez obzira sto mi je id=..19,20 izbrisan.
Ne znam da li je logicno, ali nije u skladu sa teorijom. Treba se truditi da se sklanjanju elementi sa kraja, onda mozes sa:
ALTER TABLE imetabele AUTO_INCREMENT = 1
da vratis index na max. vrednost. Tj ako imas 20 elemenata i obrises 20. , 19 .i 18. sledeci upisan bice 18. Ovo vazi za MyISAM i InnoDB tabele, BDB to radi automatski.
a za ovo od prije sa dvi tablice...sta mislite je li to dobro rjesenje? Posto ne znam za bolje a ovo funkcionira, cini mi se zakon..
Ili sa DISTINCT da eliminises odmah duplikate, ili kao sto si ti radio ("SELECT u SELECT") ili da u niz pamtis vrednosti kolona elemenata koji se ponavljaju pa da ih uporedjujes u nekoj petlji.
Pozdrav
poydrav
malo sam se sad uhvatio ovoda "id"-a, to auto increment i tako to. probat cu iskoristit te tvoje preporucene naredbe, ako ne onda ubacujem petlju. zasto ne. mozda nije direktan pristup, ali je najjednstavniji i najpouzdaniji. obicno, od svih rjesenja, najbolji se pokaze onaj koji se sastoji od najobicnijih naredbi poznatih svima. zar ne?
a sve se moze naprvit uy dobro znanje osnovnih naredbi. ja se toga drzim..
hvala jos jednom. bude li kakvih problema bilo, jos cu se ja javit.
vBulletin® v3.7.4, Copyright ©2000-2009, Jelsoft Enterprises Ltd.