Diversen

Status
Niet open voor verdere reacties.

Frenske123

Terugkerende gebruiker
Lid geworden
2 jul 2007
Berichten
1.260
Hallo,

Ik heb in mijn database een tabel met naam test en een kolom met naam aantal_personen
het aantal personen wil ik optellen maar ***t maar niet,,2 voorbeelden

PHP:
	$data = mysql_fetch_array(mysql_query("SELECT SUM(aantal_personen) AS TotalItemsOrdered FROM test")) or die(mysql_error());
echo $data ['aantal_personen']. "<br><hr>";

$data = mysql_fetch_array(mysql_query(" SELECT SUM(aantal_personen)
    FROM test;")) or die(mysql_error());
	echo $data ['aantal_personen']. "<br><hr>";

Een idee wat er fout kan zijn?
------------------------------------------------------------

Verder;

Bezoekers vullen in een form op webpagina o,a naam email en weeknummer in, deze info komt dan via database op een webpagina in een (html)tabel
is het mogelijk dat bezoekers die bijv. week 40 ingeven in een verschillende tabel op webpagina te plaatsen dan bezoekers die week 41 ingeven, of eventueel een andere oplossing

Voorbeeld pagina met (html) tabellen

Met week 40;
---------------------------------
|naam | weeknummer |email|
----------------------------------
| Jan | 40 | |
| Piet | 40 | |
---------------------------------

Met week 41;
---------------------------------
|naam | weeknummer |email|
----------------------------------
| Kees | 41 | |
|Henk | 41 | |
---------------------------------
 
Het veld heet 'SUM(aantal_personen)' of 'TotalItemsOrdered' (in je eerste query). Sowieso zou ik het wat netter opschrijven:
PHP:
$query = "SELECT SUM(aantal_personen) FROM test";
$result = mysql_query($query) or die(mysql_error());  // Alleen tijdens het testen, daarna moet je wat nettere foutafhandeling gebruiken
$data = mysql_fetch_assoc($result);
echo $data['SUM(aantal_personen)'];


Wat betreft je tweede vraag, je hebt de gegevens in een database staan. Je kan dus zelf kiezen welke gegevens (welk weeknummer bijv.) je wilt laden en die kan je dan in een tabel plaatsen.
 
Bedankt, wat eerste vraag betreft dat werkt nu goed

2e vraag , indien een bepaald weeknummer wordt ingevoerd moet dit naar tabel 40 , indien week 41 ingevuld naar tabel 41
weet niet of dit mogelijk is


tabel op webpagina;

Met week 40;
---------------------------------
|naam | weeknummer |email|
----------------------------------
| Jan | 40 | |
| Piet | 40 | |
---------------------------------

Met week 41;
---------------------------------
|naam | weeknummer |email|
----------------------------------
| Kees | 41 | |
|Henk | 41 | |
---------------------------------
 
Kan ik ook het aantal personen van bijv. alleen week 40 optellen ? iets als:

SUM aantal_pers from week 40

---------------------------------
|naam | weeknummer | aantal pers |
----------------------------------
| Jan | 40 | 3 |
| Piet | 40 | 5 |
| Piet | 43 | 5 |
| Piet | 43 | 5 |
---------------------------------
 
Bedankt , komt ook van pas is alleen niet wat ik bedoel

wat ik wil is;

week 40 8 personen. (aantal_pers)
week 43 10 personen. (aantal_pers)

dus in het voorbeeld van me ,
het weeknummer 40 met de uitkomt 8 , en weeknummer 43 met de uitkomst 10


Op webpagina
---------------------------------
weeknummer | aantal pers |
----------------------------------
40 | 8 |
41 | 11|
42 | 5 |
43 | 10 |
----------------------------------

---------------------------------
 
Laatst bewerkt:
Hoe is de database structuur op dit moment? Je hebt het eerst over "naam, weeknummer, email" en nu zie ik ineens "naam, weeknummer, aantal pers" voorbijkomen.

De tweede query zorgt er voor dat je het aantal per weeknummer krijgt dus of de kolom nou "aantal" heet of "aantal pers" dat maakt niets uit, dat kun je prima in je output regelen (Daarnaast is een spatie voor een kolomnaam niet aan te raden)
 
Was ff als voorbeeld, ik heb div, kolommen )als; naam , email, aantal_pers. enz en allen zonder spatie (aantal_pers).

Je laatste voorbeeld geeft het aantal per weeknummer, dit klopt en werkt ook als ik de code bij SQL ingeef, alleen in webpagina krijg ik het niet werkend

PHP:
$query = "SELECT week_num, COUNT(id) AS aantal FROM test GROUP BY
  week_num;";
$result = mysql_query($query) or die(mysql_error());  
$data = mysql_fetch_assoc($result);
echo $data['row COUNT(id)']."<br><hr>";

Wat ik eigenlijk wil is dat het aantal personen in een bepaald weeknummer opgeteld worden, dus bijv. in week 41 totaal 8 personen.
Ik merk nu dat ik niet helemaal duidelijk was , elke persoon geeft op met hoeveel personen hij komt

Dus op webform wordt door iemand ingevuld, naam , email, weeknummer (in welke week hij wil komen) enz. en hij geeft op met HOEVEEL personen hij komt

Dus niet elke rij is een persoon, maar het aantal dat hij opgeeft, ik wil dus de som van aantal_pers in bijv. week 41

Jan komt in week 41 en geeft in totaal 4 personen op
Piet komt in week 41 en geeft in totaal 3 personen op
Henk komt in week 41 en geeft in totaal 5 personen op

dus in week 41 totaal 12 personen.
 
Dat is inderdaad duidelijker :)

Dit zoek je dus:
[sql]
SELECT
weeknummer,
SUM(aantal_pers) AS aantal
FROM
test
GROUP BY weeknummer;
[/sql]
http://sqlfiddle.com/#!2/2b2f00/1

Omdat ik gebruik maak van "AS aantal" kan ik die kolom gewoon aanroepen via $data['aantal'].

Ik zou je willen aanraden mysql_*-functies te vermijden, deze worden in PHP 5.6 niet meer ondersteunt. Gebruik in plaats daarvan mysqli_* of PDO
 
Bedankt dat bedoelde ik!

Ik kan dus nou stellen ; in week 41 schreven zich 4 personen in die met in totaal 6 personen komen.(al bedoelde ik in mijn vraag het laatste)

Zit alleen nog met het probleem dat ik het niet werkend krijg op de webpagina , zoals hierboven ook al aangegeven , zal door tabel structuur komen?
 
Laatst bewerkt:
Dat kun je inderdaad stellen:
[sql]SELECT
weeknummer,
COUNT(id) AS aantal,
SUM(aantal_pers) AS totaal
FROM
test
GROUP BY weeknummer;
[/sql]
http://sqlfiddle.com/#!2/2b2f00/3

Aanroepen is dan:
PHP:
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

$query = "
SELECT
  weeknummer,
  COUNT(id) AS aantal,
  SUM(aantal_pers) AS totaal
FROM
  test
GROUP BY weeknummer;";

if ($result = $mysqli->query($query)) {

    /* fetch associative array */
    while ($row = $result->fetch_assoc()) {
        printf(
            'In week %d schreven zich %d personen in die met in totaal %d personen komen.<br />',
            $row['weeknummer'],
            $row['aantal'],
            $row['totaal']
        );
    }
    /* free result set */
    $result->free();
}

/* close connection */
$mysqli->close();
?>
 
Ik krijg geen output op webpagina (blank scherm) ook geen foutmelding of iets in die geest, kijken of ik iets kan ontdekken, als SQL-query werkt het goed
 
Laatst bewerkt:
Ik krijg nu de melding

Fatal error: Call to a member function query() on a non-object in /home/xxxx/database-voorbeelden/optellen-aantal-personen.php on line 14

gaat dus om
PHP:
 if ($result = $mysqli->query($query)) {
zal komen doordat ik andere inc_connect gebruik zie onderaan.
Bij die van jou blijf pagina blank, foutmelding staat aan.

------------
Dit werkt wel , maar wat simpeler als jou oplossing?

Hier staat momenteel wat meer als nodig is...
PHP:
$count="SELECT id, week_num, email, date, geslacht, sum(aantal_personen ) as total from test group by week_num";
echo "<table>";
echo "<tr>
<th>id</th>
<th>weeknummer</th>
<th>total</th>
</tr>";
foreach ($dbo->query($count) as $row) {
echo "<tr >
<td>$row[id]</td>
<td>$row[week_num]</td>
<td>$row[total]</td>
</tr>";
}
echo "</table>";
?>
Let op ik heb weeknummer als week_num


voor inc_connect met database heb ik nu;
PHP:
<?php
$host_name = "localhost";
$database = "xxx"; // Database naam
$username = "xxx"; // Database user id 
$password = "xxx";         // Paswoord

try {
$dbo = new PDO('mysql:host='.$host_name.';dbname='.$database, $username, $password);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
 
Laatst bewerkt door een moderator:
Mooi als dit werkt, PDO is ook een goede vervanger voor mysql_* ;)

Is je vraag nu opgelost?
 
Mooi als dit werkt, PDO is ook een goede vervanger voor mysql_* ;)

Is je vraag nu opgelost?

Bedankt voor je medewerking Tha Devil is opgelost hiermee, laat opic nog ff open voor als ik er toch niet uitkom met soortgelijke...
 
PHP:
<?php
$sql = 'SELECT DATE_FORMAT(date,"%d-%m-%Y") AS date FROM test';
while ( $row = mysql_fetch_array($sql) ) {   // line 21
echo $row['date'] . "<br />";
}
?>

Ga ik nog ergens de fout in met direct via een query ?

Warning: mysql_fetch_array() expects parameter 1 to be resource, string given in /xxx on line 21
 
Ja, daar ga je de fout in.

Je moet eerst de query versturen, dan het resultaat ophalen en dan daar door heen "loopen".
PHP:
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

$query = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 50,5";

if ($result = $mysqli->query($query)) {

    /* fetch associative array */
    while ($row = $result->fetch_assoc()) {
        printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);
    }

    /* free result set */
    $result->free();
}

/* close connection */
$mysqli->close();
?>
http://php.net/manual/en/mysqli-result.fetch-assoc.php
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan