Twee waardes optellen
Ik wil twee waardes optellen, dat ik zoiets als onderstaand krijg:
Waarde1 : aantal
Waarde2 : aantal
Totaal : aantal
Om het aantal te tonen doe ik:
Voor waarde 1 en 2 gebruik ik de volgende code:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$cat = mysql_query('SELECT COUNT(*) as num from auto');
$result = ($cat);
$result = mysql_fetch_assoc( $result );
$data = $result['num'];
?>
$cat = mysql_query('SELECT COUNT(*) as num from auto');
$result = ($cat);
$result = mysql_fetch_assoc( $result );
$data = $result['num'];
?>
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$cat1 = mysql_query('SELECT COUNT(*) as num from fiets');
$result1 = ($cat);
$result1 = mysql_fetch_assoc( $result1 );
$data1 = $result1['num'];
?>
$cat1 = mysql_query('SELECT COUNT(*) as num from fiets');
$result1 = ($cat);
$result1 = mysql_fetch_assoc( $result1 );
$data1 = $result1['num'];
?>
Hoe kan ik deze waardes nu het beste optellen, met een sum of een count, dit omdat het beiden uit twee andere komen, hierbij moet ook rekening gehouden worden dat de opties groeien, dus straks heb ik 5 waardes die ik optel om een totaal te maken, waar het er nu nog twee zijn...
Gewijzigd op 04/09/2010 10:56:18 door Tom Wellink
straks bv 5 waardes van elke 4000 of hoger, wordt het dan niet een zware query?
Dit zal een véél lagere belasting zijn dan alle queries apart uitvoeren.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?
$cattotal = mysql_query('SELECT COUNT(*) + COUNT(*) as num from auto,fiets');
$resulttotal = ($cattotal);
$resultotal = mysql_fetch_assoc( $resulttotal );
$total = $resulttotal['num'];
?>
Krijg hiermee geen uitkomst...
Gewijzigd op 04/09/2010 11:37:46 door Tom Wellink
momenteel doe ik dit:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?
$cattotal = mysql_query('SELECT COUNT(auto.*) + COUNT(fiets.*) as num from auto,fiets');
$resulttotal = ($cattotal);
$resultotal = mysql_fetch_assoc( $resulttotal );
$total = $resulttotal['num'];
?>
$cattotal = mysql_query('SELECT COUNT(auto.*) + COUNT(fiets.*) as num from auto,fiets');
$resulttotal = ($cattotal);
$resultotal = mysql_fetch_assoc( $resulttotal );
$total = $resulttotal['num'];
?>
Gewijzigd op 04/09/2010 12:36:28 door Tom Wellink
Verder zou je kunnen proberen om de COUNT's alleen op één kolom te zetten, dat doe ik zelf altijd. COUNT(auto.id) krijg je dan bijvoorbeeld. Misschien dat dat je op weg helpt?
Ik kom hier nog steeds niet uit, iemand die nog een helpende hand wil zijn aan deze ontdekker van php?
Tom Wellink op 04/09/2010 12:16:10:
Nee ook dan krijg ik geen uitkomst.... tstaat niet in dezelfde kolom... de meerder waardes...
momenteel doe ik dit:
momenteel doe ik dit:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?
$cattotal = mysql_query('SELECT COUNT(auto.*) + COUNT(fiets.*) as num from auto,fiets');
$resulttotal = ($cattotal);
$resultotal = mysql_fetch_assoc( $resulttotal );
$total = $resulttotal['num'];
?>
$cattotal = mysql_query('SELECT COUNT(auto.*) + COUNT(fiets.*) as num from auto,fiets');
$resulttotal = ($cattotal);
$resultotal = mysql_fetch_assoc( $resulttotal );
$total = $resulttotal['num'];
?>
Er zit een tikfout in je variabele naam.
Let op het aantal t's in "resulttotal" en "resultotal" ;-)
En verder, wat is hier het nut van? $resulttotal = ($cattotal);
Dit heb ik dan momenteel aan code, aangepast na feedback:
Wat ik dus wil doen is het aantal id's weten in auto en fiets en deze optellen, in auto zitten er bv 200 en in fiets 300 dus moet er 500 uitkomen.
Code (php)
1
2
3
4
5
2
3
4
5
<?
$cattotal = mysql_query('SELECT COUNT(auto.*) + COUNT(fiets.*) as num from auto,fiets');
$resultotal = mysql_fetch_assoc( $cattotal );
$total = $resultotal['num'];
?>
$cattotal = mysql_query('SELECT COUNT(auto.*) + COUNT(fiets.*) as num from auto,fiets');
$resultotal = mysql_fetch_assoc( $cattotal );
$total = $resultotal['num'];
?>
Ik krijg alleen deze error, maar doe volgens mij niets fout:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/****/domains/*****/public_html/****/index.php on line 231
Domein etc even weggelaten omdat ik deze nog niet in google wil hebben totdat deze gelanceerd wordt...
Gewijzigd op 06/09/2010 12:44:51 door Tom Wellink
Tom Wellink op 06/09/2010 12:44:25:
Ik doe dat meestal zodat als ik de waarde later nog wil gebruiken ik hem onder een goede naam heb staan...
Dit heb ik dan momenteel aan code, aangepast na feedback:
Wat ik dus wil doen is het aantal id's weten in auto en fiets en deze optellen, in auto zitten er bv 200 en in fiets 300 dus moet er 500 uitkomen.
Ik krijg alleen deze error, maar doe volgens mij niets fout:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/****/domains/*****/public_html/****/index.php on line 231
Domein etc even weggelaten omdat ik deze nog niet in google wil hebben totdat deze gelanceerd wordt...
Dit heb ik dan momenteel aan code, aangepast na feedback:
Wat ik dus wil doen is het aantal id's weten in auto en fiets en deze optellen, in auto zitten er bv 200 en in fiets 300 dus moet er 500 uitkomen.
Code (php)
1
2
3
4
5
2
3
4
5
<?
$cattotal = mysql_query('SELECT COUNT(auto.*) + COUNT(fiets.*) as num from auto,fiets');
$resultotal = mysql_fetch_assoc( $cattotal );
$total = $resultotal['num'];
?>
$cattotal = mysql_query('SELECT COUNT(auto.*) + COUNT(fiets.*) as num from auto,fiets');
$resultotal = mysql_fetch_assoc( $cattotal );
$total = $resultotal['num'];
?>
Ik krijg alleen deze error, maar doe volgens mij niets fout:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/****/domains/*****/public_html/****/index.php on line 231
Domein etc even weggelaten omdat ik deze nog niet in google wil hebben totdat deze gelanceerd wordt...
Zet eens foutafhandeling in je query.
Op het moment dat jij mysql_query() doet, moet je weten of het resultaat daarvan correct is.
Om te testen kan je achter de mysql_query een or die() statement zetten, en daarin mysql_error() aanroepen. Echter is dit geen nette manier van fouten afhandelen.
Deze manier kan je gebruiken puur in de ontwikkel fase. Vervang het dan later wel door:
Code (php)
1
2
3
4
2
3
4
if(!$res) {
$view->error("er is een fatale database fout opgetreden. de systeembeheerder is op de hoogte gesteld");
$logger->addEntry($_SERVER['REQUEST_URI'], mysql_error());
}
$view->error("er is een fatale database fout opgetreden. de systeembeheerder is op de hoogte gesteld");
$logger->addEntry($_SERVER['REQUEST_URI'], mysql_error());
}
Bijvoorbeeld.
Kortom: zorg dat de gebruikers niet lekker de mysql error op hun dak krijgen, maar een nette foutmelding in een nette opmaak ;-)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$sql = "SELECT COUNT(auto.*) ...";
$result = mysql_query($sql);
if($result == false) {
trigger_error(mysql_error().'<br />In query: '.$sql);
}
else {
$row = mysql_fetch_assoc($result);
echo $row['num'];
}
?>
$sql = "SELECT COUNT(auto.*) ...";
$result = mysql_query($sql);
if($result == false) {
trigger_error(mysql_error().'<br />In query: '.$sql);
}
else {
$row = mysql_fetch_assoc($result);
echo $row['num'];
}
?>
Zelf zul je nog wel e.e.a. aan moeten vullen...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sql = "SELECT COUNT(auto.*) + COUNT(fiets.*) as num from auto,fiets";
$result = mysql_query($sql);
if($result == false) {
trigger_error(mysql_error().'<br />In query: '.$sql);
}
else {
$row = mysql_fetch_assoc($result);
}
?>
$sql = "SELECT COUNT(auto.*) + COUNT(fiets.*) as num from auto,fiets";
$result = mysql_query($sql);
if($result == false) {
trigger_error(mysql_error().'<br />In query: '.$sql);
}
else {
$row = mysql_fetch_assoc($result);
}
?>
Als ik deze methode doe krijg ik:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) + COUNT(auto.*) as num from auto,fiets' at line 1
In query: SELECT COUNT(auto.*) + COUNT(fiets.*) as num from auto,fiets in /home/*****/domains/****/public_html/****/index.php on line 235
Als ik nu auto.id en fiets.id doe krijg ik er een getal uit als 983052 terwijl waarde 1 maar 1700 is en waarde 2 300, dus samen 2000
Ja, dat komt omdat je een INNER JOIN gebruikt terwijl er helemaal geen relatie tussen die twee tabellen is. Dit zijn twee verschillende vragen die je aan de database stelt (nl. het aantal records in de auto tabel en in de fiets tabel). Dan gebruik je dus ook twee verschillende queries...
Of met 1 query, met daar binnen 2 sub query's :P
Dit voorbeeld had ik overgenomen van jou, alleen hier mijn eigen gegevens ingevuld.
@niek S
Hoe bedoel je dat?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
(
SELECT
count(*)
FROM
auto
) as count_autos,
(
SELECT
count(*)
FROM
fiets
) as count_fiets,
count_autos + count_fiets as num
(
SELECT
count(*)
FROM
auto
) as count_autos,
(
SELECT
count(*)
FROM
fiets
) as count_fiets,
count_autos + count_fiets as num
Gewijzigd op 06/09/2010 18:01:31 door Pim -
tikfout in de laatste regel, maar zo inderdaad.
@Tom: het komt erop neer dat je query niet klopt. Die moet je dus aanpassen.
Is mijn query zo aan te passen dat je de afzonderlijke getallen niet queried?