[ Wizard4U @ 26.06.2008. 13:51 ] @
Ima jedna superkategorija, i onda se tu nalaze kategorije. trebam ispisati iz baze superkategoriju i onda ispod nje kategorije,i jesam ali se naravno ponavlja superkategorija iznad svake kategorije!, napravio na sljedeći naćin

Code:
<div class="spread">

<?php 
    $rs=db_query("SELECT id, category_id, category_name, category_safename, form_fields, type, related_categories, supercategory_id, super_name, super_safename  FROM category WHERE supercategory_id=1");
         
        
    while(list($id, $category_id, $category_name, $category_safename, $form_fields, $type, $related_categories, $supercategory_id, $super_name, $super_safename)=
    mysql_fetch_array($rs)){?>
    

   <div class="spread" id="heading">
 <?php echo $super_name;?>
   </div>
      <div class="spread" id="text">
 <?php echo $category_name;?>
      </div>    
    
     
    
     

         <?php
         }
         ?>    
</div>


kako da ispišem jednu (onu koju sam stavio kod naredbe za ispis) superkategoriju i onda ispod nje kategorije koje spadaju pod nju?

edit: Nemanja: Koristi [code] tagove za kodove.

[Ovu poruku je menjao Nemanja Avramović dana 26.06.2008. u 15:43 GMT+1]
[ Man-Wolf @ 26.06.2008. 18:48 ] @
Cekaj, ako sam dobro razumeo, baza izgleda ovako:

CATEGORY:

Code:

-ID-|-category_id-|-category_name-|-category_safename-|-form_fields-|-type-|-related_categories-|-supercategory_id-|-super_name-|-super_safename-|


Category_*** - vezano je za obicne kategorije
supercategory_*** - super kategorije

E sad kategorije su vezane za superkategoriju. I ti treba da izvuces sve podatke o super kategoriji ( ime, id ) i podatke iz kategorija koje su vezane za super kategoriju.

Ja bi to ovako uradio (sa 2 upita):

1. Upitom vadim sve o super kategoriji:
Code:

$super = mysql_query("SELECT supercategory_id AS ID, super_name AS Name, super_safename AS SafeName FROM category WHERE supercategory_id=1");


2. Zatim pravim niz sa podacima o superkategoriji:

Code:

$supercat = mysql_fetch_array($super, MYSQL_ASSOC);

I dobijam sledece:

$supercat['ID'] -> ID
$supercat['Name'] -> Ime super kategorije
$supercat['SafeName'] -> SafeName sup. kategorije


I onda odstampam: super kategorija ta ta i ta, bla bla bla, odnosno kako si ti uradio:
Code:

 echo '<div class="spread" id="heading">.$supercat['Name'].'</div>';


Nakon toga, radimo drugi upit gde kupimo samo obicne kategorije vezane za super kategoriju:

Code:

$kategorije = mysql_query("SELECT id, category_id, category_name AS Ime, category_safename, form_fields, type, related_categorie FROM category WHERE supercategory_id=1");

Vadimo podatke i stampamo ih:

while($kategorija = mysql_fetch_array($kategorije))
{
  echo '<div class="spread" id="text">'.$kategorija['Ime'].'</div>';
}


To bi bilo to :-)


SELECT id, category_id, category_name, category_safename, form_fields, type, related_categories, supercategory_id, super_name, super_safename FROM category
[ Wizard4U @ 30.06.2008. 08:51 ] @
Rješeno, ali sad opet ima drugi problem:
Code:

...
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC))
   { 
 echo 'Regija:' ;
 
 echo $row[regija]."<br><br>";

echo'Korisnici';

echo $row[korisnik],"<br>"
   
}


Ali bi htio da mi se "Regija:" (naslov) ispiše samo jedanput, i onda se ispod izlista sadržaj!

[Ovu poruku je menjao flylord dana 30.06.2008. u 11:01 GMT+1]
[ vecitiKrivac @ 30.06.2008. 09:28 ] @
Mislim da bi trebao ispis Regije da stavis ispred petlje.
Trenutno sta si ti uridio jeste, da ti se regija ispisuje dok listas podatke iz baze. Odnosno da u niz $row uguras sve podatke iz baze. Nakon toga ispises $row['regija']
I while petlji stampas sve clanove niza osim $row['regija']
[ Wizard4U @ 30.06.2008. 09:30 ] @
To znam, ali ima više naslova, taj naslov sam stavio samo kao primjer. Kužiš?
[ vecitiKrivac @ 30.06.2008. 09:34 ] @
Ako sam te sada razumeo imas regije za koje vezujes korsinike.
To ces da uradis tako sto ispises prvu regiju i stavis je u neku promeljivu, zatim svako sledecu regiju proveravas da li se razlikuje od prethodne
Code:
if ($strPrethodnaRegija != $row['regija'])
[ Wizard4U @ 30.06.2008. 11:51 ] @
Evo, pokušao na sljedeći naćin :

Code:

$rs=db_query("SELECT category_id, category_name, supercategory_id FROM category WHERE supercategory_id='$supercategory_id' || supercategory_id='$supercategory_id'");
$category='';
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) 
{
if($category == $row[category_name]){
continue;

else{
echo '<b>Category:</b>';
$category=$row['category_name'];
echo $category.'<br><br>';

}
}    



?>


Ali mi i dalje ispisuje Category: $category_name i tako ih ponavlja!
[ vecitiKrivac @ 30.06.2008. 14:22 ] @
Mislim da bi ovo trebalo da radi, ako je u pitanju ispisivanje prve kategorije po nazivu
Code:

$category = '';

while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) // samo kategorije treba da budu sortirane po nazivu odnosno po category_name
{
    if ($category != $row['category_name'])
    {
        // ukoliko je ovo prva kategorija
        $category = $row['category_name'];
        echo "<b>Category:</b> $category <br /><br />";
    }
    else 
    {
        // ispisujes sta zelis
    }
}


proveri da li si u sql query naveo sortiranje po category_name ili ti on po default-u sortira po id.

Ja sam ovako nesto koristio za ispisivanje zemalja. Znaci za svaku zemlju izvucem informaciju u kom se regionu nalazi (stim sto ih sortiram po nazivu regiona), pa tako da kad ih ispisujem na taj nacin sto proveravam prvu zemlju iz tog regiona
Pozdrav:)
[ Wizard4U @ 30.06.2008. 15:55 ] @
Probao na savjet Man-Wolfa na drugi način...staviti više while-a, ali mi drugi while ne ispiše ništa, zašto?? Jer mislim da sam u redu napravio!
Code:

echo'<b>Place:</b><br>';
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC))
   {  
echo "<a href='category.php?category_id=".$row['category_id']."&naselje_id=".$row['naselje_id']."'>".$row['naselje']."</a><br>";

}

echo'<br><b>Region:</b><br>';
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC))
   { 
echo "<a href='category.php?category_id=".$row['category_id']."&regija_id=".$row['regija_id']."'>".$row['reg']."</a><br>";
}


[Ovu poruku je menjao Wizard4U dana 30.06.2008. u 20:57 GMT+1]
[ Wizard4U @ 30.06.2008. 19:59 ] @
Evo cijeli kod:
Code:

$rs=db_query("SELECT spread.regija_id, spread.id AS id, spread.naselje_id AS naselje_id, spread.category_id AS category_id, spread.regija_id AS regija_id, spread.grad AS grad, region.id, region.naselje, region.regija_id, region.id_word AS reg, region.* FROM spread INNER JOIN place AS region ON spread.naselje_id = region.id WHERE spread.category_id='$category_id'"); 

//Place
echo'<b>Place:</b><br>';
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC))
   {  
echo "<a href='category.php?category_id=".$row['category_id']."&naselje_id=".$row['naselje_id']."'>".$row['naselje']."</a><br>";

}


//Regions
echo'<br><b>Region:</b><br>';
while ($row = mysql_fetch_array($rs, MYSQL_ASSOC))
   { 
echo "<a href='category.php?category_id=".$row['category_id']."&regija_id=".$row['regija_id']."'>".$row['reg']."</a><br>";
}


}

[ vecitiKrivac @ 01.07.2008. 08:35 ] @
Probaj da uradis sa dva sql i dve while petlje kao:

Code:

$sql = "SELECT regija_id, id AS id, naselje_id AS naselje_id, category_id AS category_id, regija_id AS regija_id, grad AS grad
        FROM spread
        WHERE category_id=$category_id";

$rs = db_query ($sql);



while ($row = mysql_fetch_array ($rs, MYSQL_ASSOC))
{
    echo "<b>Place:<b><br />";
    echo "<a href='category.php?category_id=".$row['category_id']."&naselje_id=".$row['naselje_id']."'>".$row['naselje']."</a><br>";
    
    $sql1 = "SELECT *
            FROM region
            WHERE id = $row[naselje_id]";

    $rs1 = db_query ($sql);
    
    while ($row1 = mysql_fetch_array ($rs, MYSQL_ASSOC))
    {
        echo "<a href='category.php?category_id=".$row['category_id']."&regija_id=".$row['regija_id']."'>".$row['reg']."</a><br>";
    }    
}


Neznam da li ovo pomaze
[ Wizard4U @ 01.07.2008. 10:00 ] @
Rješeno, napravio sam ispod ispis naselja drugi upit i rješio stvar bez kompliciranja!

Ima sad još jedan problemčić koji mislim da se može ugurat u ovu temu:

Problem:
na početku definiram :

$user=$_SESSION[user][id];

I u kodu trebam napraviti provjeru

Code:

if (.$row['user_id'].==$user)

//onda počni neku akciju


Neznam kako oblikovati ovu provjeru, probao sam stvarno na jako puno načina i ili mi ne funkcionira ili ispiše error!


[Ovu poruku je menjao Wizard4U dana 02.07.2008. u 11:56 GMT+1]
[ Wizard4U @ 03.07.2008. 13:13 ] @
Rješeno:

Nisam znao da se kod provjere a da je pomočni string u pitanju (ne znam kako nazvati kada pomoču zajedničkog stringa ispšisuješ podatke, ako netko zna neka napiše ovdje pa da i ja znam ubuduće) da se trebaju unutar uglate zagrade staviti dvostruki navodnici, evo provjere:
Code:

if($row["user_id"]==$user){
[ Man-Wolf @ 03.07.2008. 15:04 ] @
Pravo da ti kazem, nisam ni ja to znao, tj prvi put cujem da moraju dvostruki navodnici .... Pre mi se cini da je bila greska sto si stavljao tacke ----> .

Code:

if (--->.<----$row['user_id'].==$user)
[ Wizard4U @ 03.07.2008. 17:16 ] @
Nije, bila je stvar u tome kaj se treba stavit dvostruke navodnike u tom slučaju. Našao sam u jednoj od knjiga koje imam.
[ Wizard4U @ 07.07.2008. 12:07 ] @
Evo sljedeće stvari koja mislim spada tu:

Code:

$id=$_GET['id'];
$upit='SELECT id, category_id, supercategory_id, naselje_id, regija_id, jezik_id,
naslov, opis, adresa, grad, drzava, cijena, tip_oglasa FROM spread WHERE
id='$id'';
$rs = db_query($upit);    

    while ($row=mysql_fetch_array($rs)){   }
    

Pomoču tog upita ispišem onaj oglas koji ima $id (kojeg smo dohvatili). Kako da ja sad ispišem oglase koji ima sličan naslov ovome kojem smo dogvatili $id!?

Ja sam mislio da se taj upit izvrši i onda se napravi odmah ispod drugi upit u koji iz prvog prenesemo naslov pa onda ide ...LIKE %naslov%.
1. PITANJE: dal ima koje bolje rješenje?
2.PITANJE. kako da prenesem u drugi upit nešto iz prvog?
[ Man-Wolf @ 07.07.2008. 16:22 ] @
Mislim da bi ovako trebalo da dobijes to sto oces:

Code:

"SELECT id, category_id, supercategory_id, naselje_id, regija_id, jezik_id,
naslov, opis, adresa, grad, drzava, cijena, tip_oglasa FROM spread WHERE naslov LIKE (SELECT naslov FROM spread WHERE ID = $id)"
[ Wizard4U @ 07.07.2008. 22:07 ] @
1. Radi ali ispiše samo one koji su potpuno isti, a trebalo bi mi da gleda CIJELI naslov, bilo prema početku , sredini ili kraju!?!
ima koje bolje rješenje ili drugačije (a efektivnije?)?

2. Reci mi kako da naslov iz ovog upita prenesem u drugi pa onda u drugom usporedim naslov?
Pitam radi tog primjera ali i inače mi treba a ne znam to!
Code:

$id=$_GET['id'];
$rs = db_query("SELECT id, naslov FROM spread WHERE  id = $id LIMIT 5");

    while ($red = mysql_fetch_array($rs, MYSQL_ASSOC))
   { 
   echo $red['naslov'];
   }




[Ovu poruku je menjao Wizard4U dana 07.07.2008. u 23:27 GMT+1]
[ Man-Wolf @ 07.07.2008. 23:21 ] @
1. Primetio sam da neradi, moram da pogledam jos malo, pa ako nadjem resenje recicu ti ... Al bolje pitaj na MySQL forumu ....

2. Pa lako:

Code:

$rs = db_query("SELECT id, naslov FROM spread WHERE  id = $id LIMIT 5");

  $naslov = mysql_fetch_assoc($rs);
  $naslov = $naslov['naslov']; // I sad imas promenljivu $naslov, koja sadrzi naslov iz prethodnog upita, pa je upotrebis gde oces :)



Btw, pretpostavljam da ti prvi upit vraca samo jedan rezultat ?!? Ako ne, onda ti nece raditi lepo ovaj kod sto sam napisao ....
[ Wizard4U @ 08.07.2008. 07:49 ] @
Da, vraća samo jedan upit. vraća samo onaj koji ima isti naslov (ali baš isti)!
[ Wizard4U @ 08.07.2008. 10:00 ] @
Stavil sam ovako:
Code:

$id=$_GET['id'];
$rs = db_query("SELECT id, naslov FROM spread WHERE id = $id");

    $naslov = mysql_fetch_assoc($rs);
    $naslov = $naslov['naslov'];
    
    $rs2 = db_query("SELECT id, naslov FROM spread WHERE  naslov LIKE '%$naslov%'");
    $result=mysql_num_rows($rs2);
    if ($result>0)
    echo "Nađeno je <b>".$result."</b> slićnih oglasa: ";
    if ($result <= 0)
    echo "Nije pronađeno slićnih oglasa";
    while ($row = mysql_fetch_array($rs2, MYSQL_ASSOC))
   { 
   
   echo $row['naslov'];
     if ($result>0)
      echo', ';


Ali mi kad nema sličnih oglasa i kad ima ispiše mi i ovaj kojem sam dohvatio id, jel mogu kako preko id-a il drugačije samo njega izbaciti iz ispisa?
[ Man-Wolf @ 10.07.2008. 19:09 ] @
Probaj ovako:

Code:

SELECT xxx FROM xxx WHERE xxx AND id != "neki id"


;-)
[ Wizard4U @ 11.07.2008. 10:00 ] @
Sad kaj se tiče toga radi u redu! (Thanks @Man-Wolf)
Code:

<?php
//here we print spreads LIKE this (this one we catch ID)
$id=$_GET['id'];
$rs = db_query("SELECT id, naslov FROM spread WHERE id = $id");

    $naslov = mysql_fetch_assoc($rs);
    $naslov = $naslov['naslov'];
    
    
    $rs2 = db_query("SELECT id, naslov FROM spread WHERE  naslov LIKE '%$naslov%' AND id!='$id'");
    $result=mysql_num_rows($rs2);
    if ($result>0)
    echo "Nađeno je <b>".$result."</b> slićnih oglasa: ";
    if ($result <= 0)
    echo "Nije pronađeno slićnih oglasa";
    while ($row = mysql_fetch_array($rs2, MYSQL_ASSOC))
   { 
   
   echo "<a href='detail.php?id=".$row['id']."'>".$row['naslov']."</a>";
     if ($result>0)
      echo', ';
   

   }
  
?>


Ali mi ispisuje samo one koji imaju isti naziv. Ima koje bolje rješenje od toga?
[ Wizard4U @ 19.07.2008. 15:39 ] @
Zamolio bih da mi netko veli kako mogu staviti više naredbi u jedna upit prema bazi?
Imamo npr.
Code:
$rs = db_query("SELECT * FROM category ORDER BY super_name ASC");


Kako staviti više SELECT-a unutar tog jednog upita?nadam se da sam bio jasan! Hvala

[edit: Nemanja: Kod ide u [code] a ne u [php] tagove.]
[ Nemanja Avramović @ 19.07.2008. 15:44 ] @
Pa nisi baš bio jasan... kako inače (recimo iz MySQL konzole) radiš više select-a u jednom upitu?
Sa UNION.
[ Wizard4U @ 19.07.2008. 15:48 ] @
To sam trebao! Hvala
Code:
(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;


Sad kad te već gnjavim da te pitam, jel znaš gdje za primjer ili mi ti navedeš ako ti nije problem za više COUNT-a u jednom upitu?!
[ Wizard4U @ 19.07.2008. 15:53 ] @
Pokušao ali izbacuje grešku=>The used SELECT statements have a different number of columns

Code:
$rs = db_query("(SELECT * FROM category) UNION (SELECT COUNT(category_id) AS broj_cat FROM spread GROUP BY category_id) ORDER BY super_name ASC");
[ Nemanja Avramović @ 19.07.2008. 16:12 ] @
To je već problem do loše formiranog upita ili loše projektovane baze podataka. Što se PHP-a tiče, to je ok

Za slična pitanja, bolje da se obratiš na MySQL forum.
[ Wizard4U @ 19.07.2008. 16:55 ] @
Rješio!
Ali imam novi zahtjev!
S ovim kodom ispišem superkategoriju i pod svaku superkategoriju kategorije koje spadaju pod nju! Jel netko zna kako drugaćije rješiti tj. složiti kod?
Code:

<?php 
    
// Vadimo sve iz tablice category

$rs = db_query("SELECT * FROM category ORDER BY super_name ASC");

$sid = 0;
$spread = 0;

// Sad ispiši rezultate
while ($result = mysql_fetch_array($rs, MYSQL_ASSOC))
{
  // Prvo proveri da li je doslo do promene Super kategorije ?? Ako jeste, ispiši njen naslov
  // Također, otvaramo novi spread


  if ($sid !== $result['supercategory_id'])    // Doslo je do promene Superkategorije
  { 
      
      // Prvo provjera da li je vec bio otvaran spread
      // Ako nije, onda ga otvori
      // A ako je, onda zatvori stari i otvori novi :D

    if ($spread == 0)     // Spread nije bio otvaran
      {
          $spread = 1;
        echo'<div class="spread">';
      }
      else     // Spread je več bio otvoren
     {
            echo '</div>'; // Zatvori stari
          echo'<div class="spread">'; // I otvori novi :-)
      }

 // ispiši novu super kategoriju
 // Ispisujemo super kategoriju  
     echo "<div class='spread' id='heading'><a href='rubrika/".$result['supercategory_id']."'>". $result['super_name'] ."</a></div>";
 // Podesi $sid 
    $sid = $result['supercategory_id'];
  }
 
  echo "<div class='spread' id='text'><a href='kategorija/".$result['category_id']."'>". $result['category_name'] ."</a></div>";
  

}


?>


[edit: Nemanja: Kod ide u [code] a ne u [php] tagove.]

[Ovu poruku je menjao Nemanja Avramović dana 19.07.2008. u 18:07 GMT+1]
[ Wizard4U @ 21.07.2008. 21:37 ] @
Zamolio bih samo da znam ubuduće problem rješiti! kako bih rješio kad bi bio slićan slučaj!
Trebate ispisati npr.

rubrika1
podrubrika1
podrubrika2
podrubrika3
podrubrika4

rubrika2
podrubrika5
podrubrika6
podrubrika7
podrubrika8

itd.

A ne da kako ispiše onim osnovnim upitom i kodom

rubrika1
podrubrika1

rubrika1
podrubrika2

itd.



[Ovu poruku je menjao Wizard4U dana 22.07.2008. u 09:26 GMT+1]