[ corelko @ 30.09.2011. 13:17 ] @
Vezbam malo JOIN pa sam napravio 2 tabele sa gradovima. U drugoj tabeli su relacije id-ova od gradova i informacije o autobuskim linijama za te relacije. Evo kako izgledaju te moje tabele:

gradovi
idgrada, grad

relacije
idgrada1, idgrada2, vreme


stavio sam samo polje vreme i recimo da sluzi da se pamti vreme polaska autobusa. Moj JOIN da ispisem sve moguce relacije koje postoje je sledeci:

Code:

SELECT t2.grad AS grad_1, t3.grad AS grad_2,t1.vreme
FROM relacije AS t1
LEFT JOIN gradovi AS t2 ON t1.idgrada1 = t2.idgrada
LEFT JOIN gradovi AS t3 ON t1.idgrada2 = t3.idgrada


... i on odradi posao. Ali problem je sledeci:
Zelim da ovo formatiram i da tacno upisem ove podatke koje dobijem u odredjena polja, a evo gde:

Code:

while()
{
<div class="dhtmlgoodies_question">Ovde gradove prema kojima postoje relacije (idgrada2)</div>
<div class="dhtmlgoodies_answer">
    <div>
      <ul>
            <li>Ovde sva vremena iz reda vreme (vreme)</li>
          </ul>
     </div>
</div>
}


Evo da bude jasnije recimo ovako:

idgrada1 idgrada2 vreme
1 2 18h (npr BG-NS-18h)
1 4 16h (npr BG-KG-13h )
1 6 12h (npr BG-NIS-11h)

Ovo je mali primer za autobuske relacije iz BG prema NS,KG,NIS. idgrada1 uspresno pribavim, tj prosledim ga preko linka i uzmem ga sa $_GET[]; E kako sad ja da ispitam u kojim odnosima je sve idgrada1 sa idgrada2. Sta u upitu treba da promenim da mi izlistava samo relacije u kojima je idgrada1 a ne sve koje postoje? Trudio sam se da budem jasan samo ne znam jesam uspeo :)
[ djoka_l @ 30.09.2011. 13:51 ] @
Mislim da si malo pogrešno počeo da učiš - krećeš od PHP-a, a onda pokušavaš preko kolena da naučiš SQL. Uzmi lepo neku knjigu i nauči SQL, umesto da postavljaš ovakva pitanja na koja se odgovori nalaze u prvih 30 stranica bilo koje knjige o SQL-u.

Šta na primer fali ovom upitu:

Code (sql):

SELECT polazni.grad AS grad_1, dolazni.grad AS grad_2, linija.vreme
FROM relacije AS linija, gradovi AS polazni, gradovi AS dolazni
WHERE linija.idgrada1 = 1
   AND linija.idgrada1 = polazni.idgrada
   AND linija.idgrada2 = dolazni.idgrada
 


Umesto da prepisuješ SQL komande koje ne razumeš, knjigu u šake.

Uzgred, zar nije jasnije kad staviš logične aliase nego t1, t2, t3 ?
[ bogdan.kecman @ 30.09.2011. 15:58 ] @
Citat:
djoka_l:
Šta na primer fali ovom upitu


donekle je pitanje ukusa ali je JOIN forma takvog upita vecini mnogo citljivija nego gomila uslova iza where-a. Naravno slazem se da "dolazni" ima mnogo vise smisla od T5

Citat:
corelko
Zelim da ovo formatiram i da tacno upisem ove podatke koje dobijem u odredjena polja, a evo gde:


rezultat svakog upita je neka "tabela" ne kontam sta hoces da formatiras i odakle, nece ti SQL generisati html, ono u cemu generises html treba da procita taj rezultat i da ti izgenerise html, da li je to php ili java, piton, perl, ruby ili c++ ptpuno je nebitno ..
[ corelko @ 30.09.2011. 16:25 ] @
@djoka osnove PHP znam :P
Ovom upitu ne znam sta fali, ako izuzmemo da se JOIN brze izvrsava, ali sam znao sta fali mom zato sam i trazio pomoc i hvala na odgovoru pa cu upit da testiram.

@bogdane vise puta mi se desi kad postavim temu i onako u kratkim crtama objasnim sta mi treba i cesto puta me isprebijaju na forumu kako ne ponudim vise informacija da bi problem mogao da se resi. Sad kad do detalja opisem sta mi treba opet dobijem degenek :D Jednostavno sam zelio da pokazem kroz primer sta mi tacno treba i da mi ne treba nista drugo do ovoga i da onde gde sam ostavio komentare moram da upisem neki $row['grad'] i $row['linija'] i nigde drugo ne moze jer su mi one div klase tacno definisane u css i korstim jos javascript jer imam jednu padajucu listu.Ne mislis valjda da ocekujem da mi sql upit vrati neki <div> ?!? No dobro hvala na sugestijama svakako cu da ih uvazavam u svakom smislu.
[ djoka_l @ 30.09.2011. 20:10 ] @
Nikada ne znam, kod ovakvih pitanja, da li pokretač pitanja zeza ostale članove foruma, ili stvarno ne zna.
Da si, na primer, pogledao PHP manual, našao bi

Code (php):

<?php
$qry = "SELECT * FROM exp_member_data";
$res = mysql_query($mem_qry);

function mysql_fetch_all($res) {
   while($row=mysql_fetch_array($res)) {
       $return[] = $row;
   }
   return $return;
}

function create_table($dataArr) {
    echo "<tr>";
    for($j = 0; $j < count($dataArr); $j++) {
        echo "<td>".$dataArr[$j]."</td>";
    }
    echo "</tr>";
}

$all = mysql_fetch_all($res);

echo "<table class='data_table'>";

for($i = 0; $i < count($all); $i++) {
    create_table($all[$i]);
}

echo "</table>";

?>
 


Od ovog koda, do pravljenja onoga što tebi treba, a to je DIV umesto TABLE, i LI umesto TR i TD je samo korak.
Umesto toga ti stavljaš jedan potpuno nebulozan kod, koji u while petlji ispisuje onoliko DIVova koliko ima redova tabele.
Kako onda mogu ozbiljno da shvatim tvoje pitanje? I da li treba da čitam PHP dokumentaciju umesto tebe?

http://www.php.net/manual/en/function.mysql-fetch-row.php
[ bogdan.kecman @ 30.09.2011. 21:19 ] @
Citat:
corelko: vise puta mi se desi kad postavim temu i onako u kratkim crtama objasnim sta mi treba i cesto puta me isprebijaju na forumu kako ne ponudim vise informacija da bi problem mogao da se resi. Sad kad do detalja opisem sta mi treba opet dobijem degenek :D


znas kako to ide ... ja ako sam raspolozen, ne smara me niko na poslu, nije mi vruce, nije mi hladno, nisam gladan ... ja odgovorim na pitanje ma kako ono bilo postavljeno (ako znam, naravno). ako sam pak gladan, nervozan, ljut, ako me (kao npr ove nedelje) na poslu ceka pakao, onda uglavnom ne odgovaram ni na kakvo pitanje, ma kako ono bilo postavljeno ... i sad imas sve ono izmedju gde sto sam losijeg raspolozenje veca je sansa da cu da napisem duzi tekst o tome kako se postavlja pitanje nego sto bi bio odgovor na temu ..

siguran sam da se tako ponasa 99% naroda ovde tako da moras uvek da se odmaknes dva koraka i nista ne uzimas k'srcu.

Citat:
corelko:Jednostavno sam zelio da pokazem kroz primer sta mi tacno treba i da mi ne treba nista drugo do ovoga i da onde gde sam ostavio komentare moram da upisem neki $row['grad'] i $row['linija'] i nigde drugo ne moze jer su mi one div klase tacno definisane u css i korstim jos javascript jer imam jednu padajucu listu.
Ne mislis valjda da ocekujem da mi sql upit vrati neki <div> ?!? No dobro hvala na sugestijama svakako cu da ih uvazavam u svakom smislu.


pazi ako sam ja rekao da sql nece da ti vrati html razmisli zasto :)

imas 2 razloga ... ono sto je sigurno je da sql vraca tabelu, sta ces sa tom tabelom da radis je pitanje jezika u kome obradjujes taj izlaz. Upit koji si napisao radi, sam si rekao da radi.. dakle

1. ne znas da je mysql nema funkcije za generisanje html koda (malo verovatno)
2. pitas kako da resis problem u php/perl/python/ruby/java/.not ... (vrlo verovatno)

e sada, posto niti si napisao koji jezik koristis (php niti je jedini niti je najbolji a i tek si ga sada spomenuo) ja sam ti odgovorio na manje verovatnu pretpostavku .. dodatno ovo je forum za mysql, php ima svoj forum (i za advanced i za beginner korisnike) te ako ti sve sa mysql-om radi (a radi) kako da izgenerises xyz u php-u pitanje postavis tamo ...

inace taj html koji si stavio nije bas jasan evo ti primer kako nesto mozes da izvedes mada opet - to bolje pitas one u php temi oni to vade iz rukava ja sam php pisao zadnji put "ozbiljnije" dok je djindjic jos bio ziv ...

Code:

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query = "SELECT t2.grad AS grad_1, t3.grad AS grad_2,t1.vreme ".
                "FROM relacije AS t1 " .
                "LEFT JOIN gradovi AS t2 ON t1.idgrada1 = t2.idgrada " .
                "LEFT JOIN gradovi AS t3 ON t1.idgrada2 = t3.idgrada";

$result = $mysqli->query($query);

while ($row = $result->fetch_array(MYSQLI_BOTH)){
  $grad[] = $row['grad_1'] . '->'. $row['grad_2'];
  $vreme[] = $row['vreme'];
}

$result->close();
$mysqli->close();
?>

<div class="dhtmlgoodies_question">
<?
  foreach $grad as $g{
     echo $g;
  }
?>
</div>
<div class="dhtmlgoodies_answer">
    <div>
      <ul>
<?
  foreach $vreme as $v{
     echo '<li>'.$g.'</li>';
  }
?>
          </ul>
     </div>
</div>

[ biske86 @ 30.09.2011. 21:59 ] @
Korelko, i ja sam par puta imao utisak da si totalno nezainteresovan, pošto mi se činilo da ne želiš da uložš svoj trud da savladaš nove stvari. Recimo ja ti kažem (čak ti i dam link ka vikipediji) da pročitaš nešto o referencijalnom integritetu, kad ono posle par postova ti opet pitaš pitanje koje se tiče referencijalnog integriteta. Znači nisi ni pogledao link na vikipediji. To samo pokazuje tvoju zainteresovanost da nešto novo naučiš. Kao da želiš da uradiš domaći zadatak i da ne želiš da se udubljuješ u materiju.

Ipak ne želim da se ogrešim o tebe, možda se trudiš ali si apsolutni početnik i ne znaš dobro da formulišeš pitanje. U tom slučaju nije loša situacija, uz dobru volju to može da se ispravi. Svojevremeno sam prilikom svojih početaka avantura po forumima naišao na jedan odličan tekst vezan za postavljanje pitanja. Možeš ga nađi na ovoj adresi: http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Nije baš kratak ali odlično objašnjava ono sa čim imaš problem.

Nemoj pogrešno da shvatiš već pokušaj ovo da razumeš kao pozitivnu i dobronamernu kritiku

Pozdrav.
[ corelko @ 30.09.2011. 22:32 ] @
Hhahaha odusevili ste me odgovorima :D :D

@djoka samo potvrdio da me nije razumeo u cemu je problem, tj razumeo je al nije shvatio da je glavni problem bas ovja upit koji mi treba i sad ja se potrudim da do detalja napisem zasto meni sve to treba i evo ti ga na od mi prebacuje da ne znam PHP a zanemari glavni problem. Tacno je da sam napisao nebulozu kod onog while al eto desilo mi se kad buljim po celi dan u monitor. Na kraju krajeva to while sam naknadno dodao a prvobitno ga nisam hteo ni pisati i eto ajde rekoh jos da docaram malo problematiku i pogresim, ali dobro ja sam samo jedan obicni pogresivi rab boziji :D Da ne ispadne da opet davim narod ovde da zavrsimo jednom sa ovom temom, na ovo sam mislio ali kazem ti zanemari vise ovo:

Code:
<div class="dhtmlgoodies_question">Ovde gradove prema kojima postoje relacije</div>
<div class="dhtmlgoodies_answer">
    <div>
      <ul>
            while()
             {
                <li>Ovde sva vremena iz reda vreme (vreme)</li>
             }
          </ul>
     </div>
</div>



@bogdane tebi hvala na trudu ali meni to ne treba kao sto sam vec rekao na pocetku, ali ne moras da trosis svoje dragoceno vreme snaci cu se ja mada sam zato i trazio pomoc da bi neko jos dodao jedan WHERE uslov i izlistao mi samo vreme za jedan grad i zato sam naveo primer na dnu sta to treba da znaci pa sam stavio ono:

BG-NS
BG-NIS
BG-BOR

i zato sam objasnjavao da sam dobavio id tog grada (u ovom slucaju BG) jer znam da treba da se taj idgrada doda u uslov, ali bezuspesno ... kao da su oni div-ovi bas nesto toliko gresni bili pa da im se posvecuje tolika paznja (mozda ona glupost while koja se mogla jednom recenicom prokomentarisati), a pomenuo sam ih opet ponavljam slucajno i eto necu vise nikad nista u ovoj sekciji pomenuti nesto sto ima veze sa HTML. Srdacan pozdrav i ugodno vece.
[ bogdan.kecman @ 30.09.2011. 23:36 ] @
evo raspisasmo se a ja i dalje ne kontam sta pitas ..

"Ovde gradove prema kojima postoje relacije" - ovo tvoj upit ne vraca, ako hoces sve gradove prema kojima postoje relacije treba ti SELECT DISTINCT idgrada2 FROM relacije; .. eventualno moz spojis sa gradovima to da pokupis ime ..

Citat:
trazio pomoc da bi neko jos dodao jedan WHERE uslov i izlistao mi samo vreme za jedan grad


odlican primer ... da li ti sada ovde pises sarkasticno ili stvarno trazis where?

tvoj upit spocetka

Code:

SELECT t2.grad AS grad_1, t3.grad AS grad_2,t1.vreme
FROM relacije AS t1
LEFT JOIN gradovi AS t2 ON t1.idgrada1 = t2.idgrada
LEFT JOIN gradovi AS t3 ON t1.idgrada2 = t3.idgrada


radi posao - ispisuje "red voznje" dakle od, do i kada
ako dodas na kraj ORDER BY vreme imaces pravi red voznje
ako dodas WHERE t1.idgrada1 = 7 imaces spisak polazaka iz grada sa id7,
ako dodas WHERE t1.idgrada2 = 7 imaces spisak dolazaka u grad sa id7
ako dodas WHERE t1.idgrada1 = 7 OR t1.idgrada2 = 7 imaces sve relevatne polaske i dolaske za grad 7



[Ovu poruku je menjao bogdan.kecman dana 02.10.2011. u 03:31 GMT+1]
[ corelko @ 01.10.2011. 00:00 ] @
Hvala. Necu da polemisem vise nista !