|
[ 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']."®ija_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']."®ija_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']."®ija_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]
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|