Hallo allemaal,

ben pas geleden begonnen met object-oriented programming en loop vast.
<?php
public function categories()
{
	$sql1 ="
	SELECT c.id, c.name, c.description, c.position, 
	(SELECT count(t.id) 
	FROM topics as t 
	WHERE t.parent=c.id and t.id2=0) as topics, 
	(SELECT count(t2.id) 
	FROM topics as t2 
	WHERE t2.parent=c.id and t2.id2!=0) as replies 
	FROM categories as c 
	GROUP BY c.id 
	ORDER BY c.position ASC 
	";
	$result1 = mysqli_query($this->reg, $sql1); 
	$numrows1 = mysqli_num_rows($result1);

/*while ($row=....) 
{
echo $row['cat'];
}
*/


}
?>

dit zit in mn object, maar ik moet die while in mn html hebben en niet in mn object dus:

<?php 
$forum = new forum; 
$categories = $forum->categories();

foreach ($categories as $category) {
    echo '<span>' . $category['name'] . '</span>';
}
?>

dit werkt niet
mn class werkt gewoon en als ik de while loop in mn object werkt het ook gewoon, kan iemand me verder helpen?
groetjes
Wat is $this->reg?

En wat is er object georienteerd aan mysqli_query(), for that matter :/. Dat is de procedurele variant.

Verder weet ik niet precies wat je verwacht dat categories() teruggeeft?
Een MySQLi resultset (wat een object is)?
Een array?
Op dit moment retourneer je niets.

Ook hoef je geen aparte variabele hiervoor aan te maken, je zou ook zoiets kunnen doen (als je categories() hebt gerepareerd):

<?php
foreach ($forum->categories() as $category) {
    ...
}
?>

Daarnaast is een naamgeving als getCategories() wellicht ook handig, enkel "categories()" is een beetje onbestemd.

<?php
foreach ($forum->getCategories() as $category) {
    echo '<span>' . $category['categorie'] . '</span>';
}
?>

ik heb het veranderd maar hoe moet mn object er uit zien?
Je object is $forum->getCategories().
Je method, is de functie die in je class staat. Deze moet dan iets bevatten zoals dit:

while($data = mysqli_fetch_array($result)){
	    $r_news[] = $data;
	}

Deze bouwt dan een array op van je categorieën, en utieraard moet je die array ook netjes returnen.
ben ik de enige die de query raar vindt?

Een gewone Join lijkt me meer voor de hand liggen.

In dit geval leveren de 2 subquery's gewoon een getal op en is er geen sprake van een aggregatie functie (zoals count) in de hoofdquery.
Daarmee hoort er dus geen group-by in die query thuis.
Ivo P op 03/11/2015 20:56:42

ben ik de enige die de query raar vindt?


Het is een beetje een oddball query, maar opzich is alleen de GROUP BY in de hoofdquery fout, de counts konden wel eens efficienter zijn dan een volledige join op alles, dat zou je moeten benchmarken.

Maar, categorieen veranderen niet zo vaak en het tellen is sowieso een traag proces dus het is sowieso beter om de tellingen gewooon bij de categorie op te slaan en die bij elke verandering in de categorie bij te werken.

Reageren