traži:  
 php.com.hr > Pribavljanje podataka

Pribavljanje podataka
 


Prije nego se uhvatimo samog PHP dijela priće idemo vidjeti osnove SQL upita za pribavljanje podataka. Pošto se radi o najkompleksnijoj vrsti upita koju ćemo koristiti u našim skriptama njega ćemo postepeno upoznavati kroz slijedeće primjere na teoretskoj i praktičnoj osnovi.

Najjednostavniji od njih je upit koji pribavlja sve retke iz jedne tablice.

SELECT * FROM novosti

Idemo prokomentirati strukturu gornjeg upita. Upit počinje nazivom vrste upita. Ovo je pravilo koje dijele svi upiti za manipulaciju podacima u osnovnim oblicima (neki upiti imaju proširene oblike koji služe za obavljanje nekih kompleksnijih operacija ili obavljaju analizu samog upita, no mi se time nećemo baviti u ovom vodiću). Nakon imena operacije slijedi lista polja koja će se pojaviti u tablici rezultata upita. Sada ste sigurno zbunjeni, jer u našoj tablici ne postoji polje *. Zvjezdica je skraćenica koja govori da želimo pribaviti sva polja iz navedenih tablica.

Nakon liste polja slijedi FROM kojigovori da slijedi lista tablica iz kojih se podaci pribavljaju. Mi ćemo se za sada zadržati samo na pribavljaju podataka iz jedne tablice, a iz više tablica ćemo pribavljati malo kasnije u vodiću zbog dodatnih komplikacija u logici i sintaksi spajanja dvije ili više tablica u jedan rezultat upita. No bez brige, imao što do onda raditi tako da nam neće biti dosadno do tada.

Ovo su ujedno i svi obavezni dijelovi svakog SQL SELECT upita te ukoliko jedan od njih izostavite MySql će javiti grešku i neće obaviti upit.

Otvorite shell mysql klijent i obavite opisani upit. Nakon drugog primjera njegov rezultat bi mogao izgledato odprilike ovako :

mysql> SELECT * FROM novosti;

+----------+--------+-------+--------+

| idnovost | naslov | tekst | datum |

+----------+--- ----+-------+--------+

| 1 | Prva novost | Ovo je tekst prve novosti koji moze ... | 2004-04-12 |

| 2 | Druga novost | Ovo je tekst druge novosti.

ima par redaka, no ipak nije prevelika. | 2004-04-14 |

| 3 | Cibona nije pobijedila | Cibona nije uspijela pobijediti u finalu goodyear lige na razočaranje svih nas | 2004-04-18 |

| 4 | Cisterna se okrenula | Danas se okrenula cisterna i nastala je... | 2004-04-19 |

+----------+--- ----+-------+--------+

4 rows in set (0.01 sec)

Kao što vidite, rezultat je vrlo nepregledan, i to je razlog zbog kojeg ćemo kasnije u vodiću upoznati bolji alat za manipuliranje podacima u bazi, no za sada je shell klijent ima bolju edukacijsku svrhu pošto morate ručno unostiti sve naredbe te preporučam da izdržite još malo sa njim. U gornjem ispisu su neke vijesti naknadno skraćene radi bolje preglednosti ispisa.

Rezultat našeg upita nije sortiran po niti jednom polju, iako se to tako može činiti iz gornjih podataka. No retci su vraćenu po redoslijedu upisa u bazu, pa je logično da su sortirani i po datumu unosa od manjeg prema većem te po idnovost polju pošto se radi o auto_increment polju koje svakom novom retku daje vrijednost veću za 1 od onog prošlog.

Idemo sada vidjeti kako bi sortirali podatke na onaj način kojim mi želimo. Reci, po datumu, samo od najvećeg datuma prema najmanjem.

SELECT * FROM novosti ORDER BY datum DESC

Da bi sortirali rezultate upita dodajemo mu ORDER BY klazulu u ovom slučaju na njegov kraj. Oko točnog redosliejeda pojedinih klazula unutar upita se trenutno nemojte brinuti. Na kraju ovog dijal vodića se nalazi točan redoslijed svih klazula koje ćemo sada upoznati.

ORDER BY mora biti popraćen imenima polja po kojima želimo sortirati rezultat te način sortiranja. U našem slučaju se radi o polju datum i DESC (descending) načinom, tj. silazno. Suprtotno, tj. uzlazno smo mogli sirtirati tako da izostavimo DESC ili umjesto njega upišemo ASC (ascending). Naime, ukoliko se izostavi smjer sortiranja rezultata defaultni smjer je uzlazan.

Ukoliko rezultat želimo sortirati po više polja, recimo po naslovu novosti i datumu unosa možemo koristiti slijedeći upit:

SELECT * FROM novosti ORDER BY naslov, datum DESC

mysql> SELECT * FROM novosti ORDER BY naslov, datum DESC;

+----------+--- ----+-------+--------+

| idnovost | naslov | tekst | datum |

+----------+--- ----+-------+--------+

| 3 | Cibona nije pobijedila | Cibona nije uspijela pobijediti u finalu goody... | 2004-04-18 |

| 4 | Cisterna se okrenula | Danas se okrenula cisterna i nastala je prava... | 2004-04-19 |

| 2 | Druga novost | Ovo je tekst druge novosti.

ima par redaka, no ipak nije prevelika. | 2004-04-14 |

| 1 | Prva novost | Ovo je tekst prve novosti koji moze biti puno ve... | 2004-04-12 |

+----------+--- ----+-------+--------+

4 rows in set (0.01 sec)

Kao što vidite iz rezultata, rezultat je sortiran tako da se prvo sortira po naslovu, a tek onda po datumu. Znaći da će drugo polje po kojem želimo sortirati biti uzeto u obzir samo u slučaju da dva ili više redaka dijele istu vrijednost u prvom polju po kojem sortiramo. Ovo vrijedi i za sva ostala polja u listi polja po kojim asortiramo, tj. utjecaj na sortiranje rezultata nekog polja ovisi o njegovoj poziciji unutar liste polja za sortiranje rezultata upita.

Za sada ćemo se zaustaviti na ovim klazulama SELECt upita, a ostale naprednije ćemo upoznati kroz primjere koji slijede iza ovoga.

Naš slijedeći korak je izrada centralnog administracijskog alata sistema novosti (ovo je zvučalo jako važno). Zapravo će se raditi o stranici u kojoj će se nalaziti lista svih novosti iz tablice sa popratnim alatma poput linkova za brisanje pojedine novosti, linkom za uređivanje pojedine novosti itd.

Primjer 3 : Preglednik novosti

Kao što zaključujete, ovo je još jedna komponenta našeg sitea. Tako da otvorite svoj omiljeni code editor te u istom direktoriju kao i prijašnja dva filea (dbspoj.php i unosvijesti.php) stvorite novi imena preglednik.php. Ovaj alat ćemo graditi kroz par slijedećih primjera, tako da ćemo početi sa osnovnim kosturom te ga polako nadograđivati

<html>

<head>

<title>Preglednik novosti</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">

</head>

<body>

<h1>Administracija novosti</h1>

<hr>

<a href="unosvijesti.php">Dodaj novost</a>

<hr>

<?

/*

Funkcija koja pretvara datum iz MySql oblika u obični format

*/

function pretvoriDatum($mysqlDatum)

{

$tmp=explode("-", $mysqlDatum);

$datum=$tmp[2] . "." . $tmp[1] . "." . $tmp[0];

return $datum;

}

include "dbspoj.php";

$sql="SELECT idnovost, naslov, datum FROM novosti ORDER BY datum DESC";

if (!$q=mysql_query($sql))

{

echo "Nastala je greška pri izvođenju upita<br>" . mysql_query();

die();

}

if (mysql_num_rows($q)==0)

{

echo "Nema novosti";

} else {

?>

<table width="760" border="0" cellpadding="1" cellspacing="1">

<tr>

<td><b>Naslov</b></td>

<td><b>Datum</b></td>

<td><b>Opcije</b></td>

</tr>

<?

while ($redak=mysql_fetch_array($q))

{

?>

<tr>

<td><?=$redak["naslov"]?></td>

<td><?=pretvoriDatum($redak["datum"])?></td>

<td>

<a href="uredivanjenovosti.php? idnovost=<?=$redak["idnovost"]?>">Uredi</a>

<a href="?action=obrisi&idnovost=<?=$redak["idnovost"]?> ">Obriši</a>

</td>

</tr>

<?

}

?>

</table>

<?

}

?>

</body>

</html>

 



PHP i MySQL
 © 2004 - 2008 php.com.hr