PHP - foreach problem
 
Lucifix 3. jan 2011 13:52:25 Pridružen od:
14. okt 2008
744 objav
438 12 0
#1

Imam en majhen problem pri programiranju, ki pa bo verjetno težje za razumeti.



Namreč imam eno skupno tabelo v kateri se nahajajo kateri se nahajajo kategorije in podkategorije (te se povezane z row-om parent_kat).



V kolikor bi uporabnik izbral eno glavno glavno pokategorije, bi želel, da se mu prikažejo vsi izdelki, ki so povezani s pokategorijami. Namreč izdelki niso nikoli "pisani" pod glavnimi kategorijami ampak samo s podkategorijami.



Nekaj sem že poizkušal a vedno brez uspeha, ker mi je ta foreach vedno delal težave.



Tole spodaj je nastala čista zmeda, tako da prosim brez posmeha :)


$sql = 'SELECT kat_id, kat_ime, kat_parent_id, kat_url FROM oglasi_kategorije WHERE kat_parent_id=\'' . $catid . '\'';
$result = $db->sql_query($sql);

$search_id = array();
while ($search_id = $db->sql_fetchrow($result)) {
$search_id[] = intval($search_id['kat_id']);
}

foreach ($search_id as $key) {
// ????????
}

if (!empty($search_id['kat_id'])) {
$sql_where_query .= "AND kat_id IN (".$search_id['kat_id'].") ";
}
všeč(0) ni všeč(0) spam(0)
 
Tomcater 3. jan 2011 14:40:07 Pridružen od:
29. okt 2009
595 objav
509 82 8
#2

Zakaj pa ne narediš nekaj v tem stilu:


$result = mysql_query(sql_stavek) or die(mysql_error());

while ($row = mysql_fetch_assoc($result))
{
//$row['ime_kolone_v_tabeli''] ...
}

To je zelo preprost primer povpraševanja po podatkih v mysql bazi.


všeč(0) ni všeč(0) spam(0)
 
bl4ckb1rd 3. jan 2011 17:01:33 Pridružen od:
18. avg 2008
1122 objav
750 91 11
#3

Boš moral pa join podkategorij, kategorij in izdelkov narest, ali pa v foreachu izvajat SQL stavke, ki bodo dobili podatke od posameznega izdelka, recimo: SELECT * FROM izdelek WHERE katid = '$key'; ... tist if na koncu pa ne rabiš. Kot prvo, ni katid v $search_id arrayu. Predlagam ti joinanje tabel, pa potem samo izpišeš želene kolone...



edit: pa intval ni potreben oz. v določenih primerih imaš lahko čudne rezultate... v bazi raje nastavi da je kat_id kolumna lahko samo int, pa ti ni potrebno skrbeti za te stvari v kodi...


všeč(0) ni všeč(0) spam(0)
blackbird.si - Moj plac za odlaganje problemov in rešitev...
 
kelvan 3. jan 2011 17:41:57 Pridružen od:
19. okt 2007
891 objav
658 122 26
#4

kot je ze bl4ckb1rd omenil... naredi join

recimo takole na hitro

SELECT p.* FROM categories AS c1

LEFT JOIN categories AS c2 ON c1.id=c2.parentid

LEFT JOIN products AS p ON (c1.id=p.cat
id OR c2.id=p.cat_id)

WHERE c1.id=".$catId." ORDER BY....


všeč(0) ni všeč(0) spam(0)
 
Lucifix 3. jan 2011 18:49:03 Pridružen od:
14. okt 2008
744 objav
438 12 0
#5

Thx za pomoč!



Malo me samo skrbi, da bo ta query potekal predolgo z LEFT JOINi, ko bo recimo tabela

izdelkov vsebovala nekaj 1000 vnosov. Se motim?



Zaradi tega sem mislil, da bi bilo lažje dobiti vse podkategorije in vstavil v glavni sql stavek za prikaz izdelkov:


$sql_where_query .= "AND kat_id IN (".$search_id['kat_id'].") ";

Recimo:


$sql_where_query .= "AND kat_id IN (12, 14, 15) ";
všeč(0) ni všeč(0) spam(0)
 
bl4ckb1rd 3. jan 2011 18:58:32 Pridružen od:
18. avg 2008
1122 objav
750 91 11
#6

SQL je narejen za to... zato pa imamo cache itd... Raje poizkusi, preden te skrbi kaj bo če bo... Tabele z nekaj sto tisoč vrsticami se sortirajo in joinajo brez posebnih problemov, če so SQL stavki pravilno napisani...


všeč(1) ni všeč(0) spam(0)
blackbird.si - Moj plac za odlaganje problemov in rešitev...
 
Lucifix 3. jan 2011 20:02:52 Pridružen od:
14. okt 2008
744 objav
438 12 0
#7

Kljub vsemu sem našel tisto kar sem iskal:


$sql = 'SELECT kat_id FROM oglasi_kategorije where kat_parent_id=$catid;

if (!($result = $db->sql_query($sql)))
{
echo 'Ne najdem podkategorije';
}

$kat_ids = $db->sql_fetchrowset($result);
$num_kat_ids = $db->sql_numrows($result);
$db->sql_freeresult($result);

$total_rows = $num_kat_ids;

$kat_id = array();

for ($j = 0; $j < $num_kat_ids; $j++)
{
$kat_id[] = intval($kat_ids[$j]['kat_id']);
}

$kat_parent_id = " AND kat_id IN (" . implode(', ', $kat_id) . ") ";

Hvala še 1x vsem za pomoč!


všeč(0) ni všeč(0) spam(0)
 
bl4ckb1rd 3. jan 2011 20:08:33 Pridružen od:
18. avg 2008
1122 objav
750 91 11
#8

Zdej pa tole predelej z foreach za vajo.


všeč(0) ni všeč(0) spam(0)
blackbird.si - Moj plac za odlaganje problemov in rešitev...
 
Lucifix 3. jan 2011 20:11:28 Pridružen od:
14. okt 2008
744 objav
438 12 0
#9

Ja sem se zmotil pri foreach-u, ker ga očitno res ne rabim :/ My bad...


všeč(0) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se