[ Mister Big Time @ 18.09.2006. 10:19 ] @
Zelim npr. da napravim prikaz arhive dogadjaja (arhiva=stari dogadjaji u bazi osim onih koji su aktuelni na sajtu):

Primer SQL upita koji to radi:
Code:

SELECT *
FROM `dogadjaji_news`
WHERE kategorija_name NOT LIKE 'sajt_aktuelno';


Ovaj upit normalno radi na samoj bazi.

Medjutim treba preko PHP-a to prikazati odnosno implementirati u vec postojecu web aplikaciju.

Kod za prikaz glasi:

Code:

 <?php
    include_once '../system/prikaz.php';
         arhiva(10);
?>


broj 10 u zagradi je promenljiva koja odredjuje broj prikazanih najnovijih item-a na stranici. To radi normalno i lepo. Promenom broja u zagradi menja se i broj dogadjaja koji ce se pojaviti na stranici.

u fajlu prikaz.php se nalazi funkcija koja prihvata gornje promenljive iz zagrade:
Pocetak funkcije koji je najbitniji za ovo sto meni treba ako se ne varam:
Code:
function arhiva($broj, $kategorija = ' ') 



Dakle $broj ce prikazati 10 najnovijih dogadjaja iz baze kako je definisano, a $kategorija ostavlja prazno kako bi izlistali sve dogadjaje iz svih kategorija. Ako se u zagradu posle broja doda:
Code:
arhiva(10,ime_kategorije);

sistem ce prikazati 10 dogadjaja iz SAMO navedene kategorije.

Ja zelim da definisem za prikaz arhive da se iz baze vuku XY dogadjaja SAMO BEZ prikaza jedne, imenovane kategorije odnosno polja.

Dakle zelim da mi upit vrati sve redove iz neke tabele ISKLJUCUJUCI samo jedan red koji ne zelim da se prikaze u upitu.

Da ponovim, direktno na bazi to se postize vrlo lako upitom:
Code:

SELECT *
FROM `dogadjaji_news`
WHERE kategorija_name NOT LIKE 'sajt_aktuelno';

Ali mi problem pravi gde da ovaj upit implementiram, (NOT LIKE deo) da li u fajl prikaz.php gde je funkcija za prihvatanje promenljivih ili u sam prikaz stranice posle broja 10? Probao sam ali mi uvek javlja gresku na toj liniji...


Oci mi ispadose od guglanja za EXCEPT klauzulom medjutim izgleda to ne f-nise tj. ne postoji u SQL-u?

Nabasao sam jedva na ovo:
Citat:
A compound SELECT is formed from two or more simple SELECTs connected by one of the operators UNION, UNION ALL, INTERSECT, or EXCEPT.


EXCEPT Clause

The EXCEPT clause has this general form:

select_statement EXCEPT [ ALL ] select_statement

select_statement is any SELECT statement without an ORDER BY, LIMIT, or FOR UPDATE clause.

The EXCEPT operator computes the set of rows that are in the result of the left SELECT statement but not in the result of the right one.

The result of EXCEPT does not contain any duplicate rows unless the ALL option is specified. With ALL, a row that has m duplicates in the left table and n duplicates in the right table will appear max(m-n,0) times in the result set.

Multiple EXCEPT operators in the same SELECT statement are evaluated left to right, unless parentheses dictate otherwise. EXCEPT binds at the same level as UNION.



Ako se ne varam mozda moze nesto i sa operandom: <> (Not equal) ali mi nesto ne ide najbolje a i preumoran sam trenutno..


Nadam se da ce neko iskusan znati o cemu se ovde radi... isto se nadam da sam dobro i detaljno objasnio sve... ako treba mogu jos detalja da postujem.

[ misk0 @ 18.09.2006. 20:17 ] @
A da postujes query koji izvlaci N itema iz baze? Onda ga samo izmjenimo da ne prikaze tih N vec ostalih SVE - N?
Bitan je nacin sortiranja.
[ Mister Big Time @ 18.09.2006. 22:23 ] @
Evo, ovo bi trebalo da je to..
Da napomenem da SQL upit koji sam postovao direktno na bazi radi odlicno... dakle mozda je tema trebala pre da ide u PHP forum? Nebitno sada...

f-ja headers=arhiva sto sam ja rename-ovao..
$cat= kategorija kod mene
$number= broj


Code:

  ////////////////////////////////////////////////////////////////////////////
    // HEADERS - Show item headers
    ////////////////////////////////////////////////////////////////////////////
    function headers($number, $cat = '') {
        global $CONFIG;

        if ($CONFIG['enablecats'] == 'yes') {
            if (is_array($cat)) {
                $cat_stuff = "WHERE ";
                for ($i = 0; $i < count($cat); $i++) {
                    $cat_stuff .= "cat_name='" . addslashes($cat[$i]) . "' ";

                    if (($i + 1) < count($cat)) {
                        $cat_stuff .= "OR ";
                    }
                }
            } elseif ($cat != '') {
                $cat_stuff = "WHERE cat_name='" . addslashes($cat) . "' ";
            } else {
                $cat_stuff = '';
            }
        }

        $sql = "SELECT * FROM " . $CONFIG['tblPrefix'] . "news $cat_stuff ORDER by postedOn DESC LIMIT " . $number;
        $headers = mysql_query($sql) or die(displayerror(mysql_error()));

        if ($header = mysql_fetch_array($headers)) {
            do {
                $hitem = gettemplate('header');

                $hitem = str_replace('<id>', $header['id'], $hitem);
                $hitem = str_replace('<subject>', stripslashes(htmlspecialchars($header['subject'])), $hitem);
[ Mister Big Time @ 20.09.2006. 18:00 ] @
anyone?
[ igac @ 20.09.2006. 19:21 ] @
koliko sam skontao tebi treba

Code:

...
elseif ($cat != '') {
    $cat_stuff = "WHERE cat_name NOT LIKE '" . addslashes($cat) . "' ";
} else {
    $cat_stuff = '';
}
[ gordon_beneth @ 20.09.2006. 20:06 ] @
Probaj ovako:
umesto
Code:
...
} elseif ($cat != '') {
                $cat_stuff = "WHERE cat_name='" . addslashes($cat) . "' ";
                .....

ukucaj
Code:
...
} elseif ($cat != '') {
                $cat_stuff = "WHERE cat_name NOT LIKE'" . addslashes($cat) . "' ";
           ..........
[ Mister Big Time @ 20.09.2006. 21:38 ] @
pazi kad radi Samo se doda NOT LIKE.... koja glupost! Fora je u tome sto sam i ja sam probao tako, medjutim nisam brisao znak jednakosti =


HVALA PUNO MOMCI!