Ik wil graag de volgende query's samenvoegen en ik krijg het niet voor elkaar.

Query 1:
SELECT reactie.* , users.type
FROM reactie, users
WHERE reactie.id = '" .$_GET["id"]. "'
AND reactie.auteur = users.gebruikersnaam
GROUP BY reactie.nr
ORDER BY reactie.nr DESC";

Query 2:
SELECT auteur, COUNT(*)
FROM reactie
GROUP BY auteur

de auteur van de 2de query hoeft niet weergegeven te worden zolang ik maar alle reacties krijg per auteur.
De eerste query laat alle reacties zijn per topic en het type gebruiker. Hier wil ik dus ook graag het aantal reacties van de gebruiker bij hebben staan!
iChris schreef op 21.10.2008 15:03

Edit: Bij een goede server is die snelheid trouwens te verwaarlozen. Het is nog altijd MySQL, en als je niet heb genormaliseerd is het alsnog een rotzooi.

Wat nog steeds geen argument is om databasewerk af te wikkelen in PHP. Een beetje structuur, richtlijnen en principes in programmeerwerk kunnen geen kwaad... Crap in === crap out
ik gebruik idd de "standaard" query's en geen left joins of group by's. Maar hoe pas ik dat dan toe op de query van Eddy?
LEFT GROUP BY u.id?
Nou, LEFT GROUP BY bestaat niet volgens mij. Kijk even naar de MySQL Reference @ dev.mysql.com
nee daar kwam ik ook achter. Maar ik krijg het dus niet voor elkaar...
Ik hoop nu dus eigenlijk dat Jan nog met een oplossing komt? of iemand met een oplossing om het via PHP op te lossen als het niet via SQL gaat...
iChris schreef op 21.10.2008 14:18
JWaarom op SQL niveau als je het ook op PHP niveau kan doen?
Omdat dat vele malen efficienter is misschien?
Jentie schreef op 17.10.2008 20:22
van posts alle (posts.*) en van users het type (staat er btw niet in ;) ) en dan nog eens het aantal posts per user.
Dit zijn dus twee verschillende vragen aan de database, waar je dus ook twee verschillende queries voor moet gebruiken. Dit kun je onmogelijk samenvoegen...

Alle postinformatie en usertype uit een bepaald topic:

SELECT
  p.*,
  u.type
FROM
  posts AS p
JOIN
  users AS u
    ON u.id = p.user_id
WHERE
  p.topic_id = 1

Aantal posts per user:

SELECT
  u.naam,
  COUNT(p.id) AS aantal
FROM
  users AS u
JOIN
  posts AS p
    ON p.user_id = u.id
GROUP BY
  u.naam

ps. Lees ook deze handleiding over het juiste gebruik van GROUP BY nog eens na. Het lijkt erop dat je nog niet helemaal door hebt wat deze functionaliteit nu precies doet.
@Blanche ik heb de handleiding gelezen maar zie niet in waar ik GROUP BY niet goed heb gebruikt. Zou je dat kunnen toelichten? Ik ben dr iig wel wat wijzer van geworden.

@iedereen dan komt nu het volgende probleem. Ik heb de volgende php code:

<?php
while($rij = mysql_fetch_array($result2)) {
	$reactie = smiley(str_replace(" ", "&nbsp;", wordwrap(str_replace("\n", "<br>", $rij["reactie"]), 90, "<br>")));
	echo("<tr>
			<td width=\"20%\" rowspan=\"2\" valign=\"top\"><font color=\"#0000FF\">" .$rij["auteur"]. "</font><br>
			<font size=\"2\"><i>" .$rij["type"]. "</i><br>
			Posts: #" .$rij["aantal"]. "</font></td>");
	if($_SESSION["gnaam"] == $rij["auteur"] || isset($_SESSION["admin"])) {
		echo "<td><a href=\"edit_post.php?nr=" .$rij["nr"]. "\"><img src=\"images/edit.gif\" border=\"0\" alt=\"Edit\" align=\"right\"></a>";
	}
	else echo "<td>";
	echo "<font size=\"2\">Geplaatst op: ".$rij["datum"]."</font>";
	if(isset($rij["dt_edit"])) {
		echo "<br><font size=\"1\">Dit bericht is aangepast op " .$rij["dt_edit"]. " door " .$rij["name_edit"]. "</font></td></tr>";
	}
	else echo "</td></tr>";
	echo("<tr>
			<td valign=\"top\" width=\"80%\">" .$reactie. "</td></tr>");
}
?>

Hier
Posts: #" .$rij["aantal"]. "
moet dus het aantal posts komen te staan. Hoe krijg ik die er dan in?
p.s. in $rij zitten alle reacties per topic en de user type etc alleen $rij["aantal"] bestaat dus niet aangezien die niet in dezelfde query kan.
iChris miss een idee?
of moet ik hier nu een aparte thread van maken in de php sectie?

Reageren