[PHP/Mysql] count vraagje

Pagina: 1
Acties:

  • Atteman146
  • Registratie: Juli 2000
  • Laatst online: 14-09 18:14
Ik zit met het volgende en ik kom er echt helemaal niet meer uit...

Ik heb 2 tabellen, een nieuws en een nieuwsreakties.

Nu wil ik de laatste 5 nieuwsberichten weergeven (uit de tabel nieuws) dat lukt ook wel. Maar daarbij uit de tabel nieuwsreakties het aantal reakties dat er gepost zijn op dat betreffende onderwerp en dat lukt dus niet.

Hoe fix ik dat?
Tabel nieuws
id,titel,datum,tijd,naam,email,bron,urlbron,nieuws
Tabel nieuwsreakties
reaktieid, id,nickname, datum, tijd, reaktie, emailadres

Ik weet dat het met count() moet maar krijg dat niet in 1 query...

Wat ik heb is dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?
$result = mysql_query ("select email, naam, datum, tijd, bron, urlbron, titel, nieuws from nieuws order by id desc limit 5")
or die ("Invalid query 1");

while ($row = mysql_fetch_array($result)){

       echo "<p align='center'>";
       echo "<table border='0' cellpadding='0' cellspacing='0' width='85%'>";
       echo "<tr>";
       echo "<td width='2%'>[img]'../images/hoek_rond_links.gif'[/img]</td>";
       echo "<td width='97%' bgcolor='#390F7B' align='center'><font face='Verdana' color='#FFFFFF' size='2'>";
       echo "<font face = 'Verdana' size='1'>Gepost door: ";
       echo "<a href='mailto: $row[email]'>";
       echo $row["naam"]."</a> op\n";
       echo $row["datum"]." \n";
       echo $row["tijd"]." uur,\n";
       echo "Bron: ";
       echo "<a href='$row[urlbron]'\n>";
       echo $row["bron"]."</a></font></td><br><br>\n";
       echo "<td width='3%'>[img]'../images/hoek_rond_rechts.gif'[/img]</td>";
       echo "</tr>";
       echo "</table>";
       echo "<font face = 'Verdana' size='2'><b><br>";
       echo "<p align='left'>";
       echo $row["titel"]."</b><br><br>\n";
       echo $row["nieuws"]."<br><br>\n";
       echo "<font face = 'Verdana' size='1'>";
}
?>

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Je moet de twee tabellen joinen en vervolgens groeperen op je nieuws-id.
Dan kun je een count per nieuws-id in je select list opnemen.

Who is John Galt?


  • Atteman146
  • Registratie: Juli 2000
  • Laatst online: 14-09 18:14
bedankt voor je reaktie!
Maarre hoe moet dat?

Zoiets of bedoel je wat anders?
PHP:
1
2
3
<?
$result = mysql_query ("select nieuws.*, nieuwsreakties.* from nieuws, nieuwsreakties")
?>

Maar hoe dan verder?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Ik kan 'em helemaal voor je uitschrijven, maar ik denk dat je beter even een SQL tutorial kunt zoeken.
Dan heb je er na dit probleem nog wat aan :)

Who is John Galt?


  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025

Verwijderd

Ik denk aan;

count, limit, group by

  • Atteman146
  • Registratie: Juli 2000
  • Laatst online: 14-09 18:14
Volgens mij ben ik inmiddels op de goede weg dankzij jullie aanwijzingen.
Ik heb nu dit:

select nieuws.*, nieuwsreakties.*, count(*D from nieuws, nieuwsreakties where nieuws.id = nieuwsreakties.id group by nieuws.id order by nieuws.id desc limit 5;

Hij laat nu netjes zien hoeveel reakties er zijn op een nieuwsitem alleen laat hij geen nieuwsitems zien waar geen reakties op zijn...

Ik wil dus (als het kan) de laatste 5 nieuwsitems zien met het aantal reakties erop en dus ook als het aantal 0 is.

Help...

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op zaterdag 15 december 2001 22:02 schreef Atteman het volgende:
Ik wil dus (als het kan) de laatste 5 nieuwsitems zien met het aantal reakties erop en dus ook als het aantal 0 is.
Het magische woord hiervoor is 'outer join'.

Who is John Galt?


  • Onno
  • Registratie: Juni 1999
  • Niet online
Op zaterdag 15 december 2001 22:04 schreef justmental het volgende:
Het magische woord hiervoor is 'outer join'.
Nee hoor.
Op zaterdag 15 december 2001 22:02 schreef Atteman het volgende:
Volgens mij ben ik inmiddels op de goede weg dankzij jullie aanwijzingen.
Ik heb nu dit:

select nieuws.*, nieuwsreakties.*, count(*D from nieuws, nieuwsreakties where nieuws.id = nieuwsreakties.id group by nieuws.id order by nieuws.id desc limit 5;
Dat is niet eens een geldige SQL query, dus als MySQL daar wel wat van bakt heb je geluk gehad.

Je groupt op nieuws.id, dat betekent dat de rest van de dingen die je select uniek moeten zijn per teruggegeven nieuws.id. Dat komt dus op functies als max(), min(), sum(), count(), enz. neer meestal.

Probeer eens iets als
code:
1
2
3
4
select nieuws.id,nieuws.titel,count(*) from nieuws,nieuwsreackties
  where nieuws.id = nieuwsreakties.id
  group by nieuws.id order by nieuws.id,nieuws.titel desc
  limit 5

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op zaterdag 15 december 2001 22:19 schreef Onno het volgende:

[..]

Nee hoor.
[..]

Dat is niet eens een geldige query, dus als MySQL daar wel wat van bakt heb je geluk gehad.

Je groupt op nieuws.id, dat betekent dat de rest van de dingen die je select uniek moeten zijn per teruggegeven nieuws.id. Dat komt dus op functies als max(), min(), sum(), count(), enz. neer meestal.

Probeer eens iets als
code:
1
2
3
4
select nieuws.id,nieuws.titel,count(*) from nieuws,nieuwsreackties
  where nieuws.id = nieuwsreakties.id
  group by nieuws.id order by nieuws.id,nieuws.titel desc
  limit 5
Ik ken MySQL niet, maar hij heeft geen nieuwsreacties bij een nieuwsitem, dus bij de joinconditie raakt ie toch het record kwijt :?
Dus een outer join, of bestaat dat niet in MySQL?

Who is John Galt?


  • Onno
  • Registratie: Juni 1999
  • Niet online
Op zaterdag 15 december 2001 22:23 schreef justmental het volgende:
Ik ken MySQL niet, maar hij heeft geen nieuwsreacties bij een nieuwsitem, dus bij de joinconditie raakt ie toch het record kwijt :?
Dus een outer join, of bestaat dat niet in MySQL?
Hmm.. daar heb je wel gelijk in ja, maar als je een outer join doet gaat count(*D wel 1 opleveren, ook al heb je nul reakties. Dus of je nou een outer of inner join gebruikt, goed gaat het in beide gevallen niet. :)

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op zaterdag 15 december 2001 22:32 schreef Onno het volgende:
Hmm.. daar heb je wel gelijk in ja, maar als je een outer join doet gaat count(*D wel 1 opleveren, ook al heb je nul reakties. Dus of je nou een outer of inner join gebruikt, goed gaat het in beide gevallen niet. :)
Dan zijn er nog een paar alternatieven:
1:
[Onno's query]
union all
selectie van nieuws, 0
where not exists (selectie van nieuwsitem)
2:
Bijhouden van het aantal reactie in een veld bij de nieuwstabel.

Who is John Galt?


  • Onno
  • Registratie: Juni 1999
  • Niet online
Op zaterdag 15 december 2001 22:37 schreef justmental het volgende:
union all
MySQL doet niet aan unions.
where not exists (selectie van nieuwsitem)
Idem voor subqueries.
Bijhouden van het aantal reactie in een veld bij de nieuwstabel.
Maar dat kan wel natuurlijk. :)

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op zaterdag 15 december 2001 22:40 schreef Onno het volgende:
MySQL doet niet aan unions.
[..]
Idem voor subqueries.
Phoei, en ik maar klagen op m'n Oracle db-tje :o

Who is John Galt?


  • Atteman146
  • Registratie: Juli 2000
  • Laatst online: 14-09 18:14
Volgens mij stelde ik een leuke vraag :)

Is het bijhouden van het aantal reakties in een veld de beste optie?

Volgens mij hoeft dat niet zo heel moeilijk te zijn.
Als je het veld standaard op waarde 0 zet en dan bij iedere reaktie het veld met 1 laten vehogen dan ben je er toch al?

Dan hoef je ook geen lange query te bakken om het aantal posts eruit te sleuren toch?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op zaterdag 15 december 2001 22:46 schreef Atteman het volgende:
...
Mhmwa, Ja, Ja, Ja

Who is John Galt?


  • Atteman146
  • Registratie: Juli 2000
  • Laatst online: 14-09 18:14
Op zaterdag 15 december 2001 22:49 schreef justmental het volgende:

[..]

Mhmwa, Ja, Ja, Ja
Tot zover allemaal bedankt voor jullie hulp! :)
Ik ga het eens met een veld voor de reakties proberen.
Pagina: 1