[PHP] Fout in mysql_num_rows

Gestart doorAntonn37 reacties70 weergaven

38 berichten · pagina 1 van 3

Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
$topics_sql = mysql_query("SELECT * FROM topics WHERE catid = ".$cFetch[id]." AND NOT del=1");
$topics = mysql_num_rows($topics_sql);
while($topics_row = mysql_fetch_assoc($topics_sql)) {
$reacts = mysql_num_rows(mysql_query("SELECT * FROM forumreactions WHERE topic_id = ".$topics_row[id]." AND NOT type=0"));
}


Wat is er fout aan? echo $reacts; geeft enkel het aantal reacties weer van laatst geselecteerde topic.
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Het lijkt me niet erg efficiënt als je voor elk topic een nieuwe query gaat draaien.
Kan je het totaal aantal reacties niet opslaan in een apart veld in je categorie-tabel?

Je moet uiteraard wel consequent de telling in de gaten houden.
0
Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Onprofessioneel en onhandig.

toevoeging op 7 februari 2012, 18:57:00:
Ik wil het op deze manier doen, en ik weet dat het mogelijk is wink Heb toch niet zoveel cats wink
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Vriendje schreef:
Onprofessioneel en onhandig.....

...wat je nu hebt!

phpBB, MyReact en andere forums doen dit ook, wat ik beschrijf.
toevoeging op 7 februari 2012, 19:00:47:
Vriendje schreef:
Onprofessioneel en onhandig.
toevoeging op 7 februari 2012, 18:57:00:
Ik wil het op deze manier doen, en ik weet dat het mogelijk is wink Heb toch niet zoveel cats wink
Wat is er mis om het meteen goed te doen? Op deze manier schiet jij jezelf behoorlijk in de voeten. Ik geef toe, iedereen maakt wel eens een foutje, maar zorg wel dat je op de juiste weg verder gaat, het is immer opbouwende kritiek....

Als je zo door gaat moet je je niet gaan verbazen dat je hosting je opeens ooit af zal gaan sluiten wegens te veel CPU/geheugen verbruik.

Ik kan eventueel wel een query geven om alle posts in de categorieën (forums) te hertellen, zodat je de aantallen netjes geteld hebt...
0
Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Aarclay schreef:
Ik kan eventueel wel een query geven om alle posts in de categorieën (forums) te hertellen, zodat je de aantallen netjes geteld hebt...
AUB?
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
UPDATE forums SET postscount = ( SELECT COUNT( 1 )
        FROM forummessages, forumtopics
        WHERE forummessages.topicid = forumtopics.id AND forumtopics.foraid=forums.id )


Gaarne zelf even af stemmen op jouw structuur. smile
Je kan deze querie ook verwerking een Adminpanel-pagina om de boel te hertellen. Zou zelfs een paar keer per dag via een cronjob kunnen, om zelf zeker van een goede telling te zijn.
0
Berichten
13.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Vriendje, kijk eerst eens naar je query, het ligt niet aan de mysql_num_rows.

Ook raad ik je aan om COUNT(1) te gebruiken ipv alle data op te halen uit de database en dan alleen de regels te tellen, dat laadt een stuk sneller, en heeft nog wel wat voordelen.
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Beste is dat je de aantallen op forum, en topic niveau apart telt.

Dus per forum het aantal topic, en per topic het aantal posts.
0
Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
COUNT(1), ik vind niets op google. Kan iemand me er hier wat uitleg / links van geven?
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Dan kan je ook kijken naar de functie COUNT() zelf
0
Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Aarclay schreef:
Dan kan je ook kijken naar de functie COUNT() zelf
Heeft zelfde effect? Maar ik ben niet van plan om boel nog eens om te bouwen, of veel functies bij te maken. Kan het niet gewoon met huidige database structuur?

PS. Thanks voor link yummie
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Vriendje schreef:
Heeft zelfde effect? Maar ik ben niet van plan om boel nog eens om te bouwen, of veel functies bij te maken. Kan het niet gewoon met huidige database structuur?
Een huis bouw je ook niet op een slechte fundering.....
En veel moeite is het ook weer niet om het om te bouwen.

- Haal de telling uit de database, weinig moeite.... gewoon SELECT en fetch, zoals je ook normaal doet met data uit de database.
- Zorg ervoor dat bij het plaatsen van elk topic de bijbehorende topic-teller in de forum-tabel gewordt geupdated (UPDATE forums SET topiccount = topiccount+1)
- Idem dito ook voor de posts-aantallen, die je in de topic-tabel updated.
- Voor beiden hertellen met mijn querie.

Profit....

Een beginner heeft hier weinig werk aan. smile
0
Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Aarclay schreef:
Eerdere citaten tonen
Vriendje schreef:
Heeft zelfde effect? Maar ik ben niet van plan om boel nog eens om te bouwen, of veel functies bij te maken. Kan het niet gewoon met huidige database structuur?
Een huis bouw je ook niet op een slechte fundering.....
En veel moeite is het ook weer niet om het om te bouwen.

- Haal de telling uit de database, weinig moeite....
- Zorg ervoor dat bij het plaatsen van elk topic de bijbehorende topic-teller in de fortum-tabel gewordt geupdated (UPDATE forums SET topiccount = topiccount+1)
- Idem dito ook voor de posts, die je in de topic-tabel updated.
- Voor beiden hertellen met mijn querie.

Profit....

Een beginner heeft hier weinig werk aan. smile
En toch wil ik andere manier clown
Trouwens, aan jou query kan ik niet echt goed uit omdat je andere tabelnamen gebruikt, en is eenmaal ingewikkeld als een mummie yummie
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Ik raad je aan om gewoon eens wat met kritiek van anderen te doen in plaats van bijdehand te zijn en je kop in het zand te steken. Het is wel opbouwende kritiek, wil ik je nogmaals vertellen. smileZo voorkom je dat je het jezelf moeilijk gaat maken.

Als je moeite met je query hebt. Ikzelf werk met forums. Blijkbaar noem jij dat categorieen, ieder zijn keus.
Ik denk dat de querie nu niet meer zo ingewikkeld is, anders hoor ik het wel waar je op vast loopt.
0
Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Oke dan maar, we doen het op jou manier wink
Kan je je code ombouwen naar de volgende database structuur?
Spoiler tonen
Codeblok (forumreactions):
1
2
3
4
5
6
7
8
9

CREATE TABLE IF NOT EXISTS `forumreactions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`topic_id` int(11) NOT NULL,
`message` varchar(3000) NOT NULL,
`author` int(11) NOT NULL,
`type` int(11) NOT NULL,
`date_posted` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4614 ;

Codeblok (topics):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

CREATE TABLE IF NOT EXISTS `topics` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(45) NOT NULL,
`author` int(11) NOT NULL,
`message` varchar(10000) NOT NULL,
`type` int(11) NOT NULL,
`gesloten` enum(0,1) NOT NULL,
`sticky` enum(0,1) NOT NULL,
`del` enum(0,1) NOT NULL,
`date_posted` datetime NOT NULL,
`catid` int(11) NOT NULL,
`last_reaction` datetime NOT NULL,
`views` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=539 ;

Codeblok (cats):

1
2
3
4
5
6
7
8
9

CREATE TABLE IF NOT EXISTS `cats` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(60) NOT NULL,
`description` varchar(3000) NOT NULL,
`tottopics` int(11) NOT NULL, // HIER MOET HET WORDEN GETELD
`allowed` int(11) NOT NULL,
`up` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren