Tabel optellen bij andere tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Thom Stofberg

Thom Stofberg

12/02/2020 20:46:54
Quote Anchor link
Voor mijn projectje loop ik tegen iets aan wat ik niet weet op te lossen.
Ik weet in deze situatie niet eens hoe te beginnen.

Ik heb een tabel in de database staan met de tabelnaam "Vandaag".

Nu wil ik dat de data in deze tabel wordt opgeteld bij de tabel met tabelnaam "Totaal".

Op de ene dag zijn de kolommen in "Vandaag" bijv. Appels/Peren/Bananen.
Op een andere dag kunnen het Bijv. Appel/Citroenen/Kersen zijn.
de eerste kolom in alle tabellen is id met primary key.

Nu wil ik dus dat (met MySQLi) de data wordt gelezen, en wordt toegevoegd bij de tabel "Totaal",
en als het nodig is bij "Totaal" de kolommen en id aanmaken.

Zou iemand mij hiermee kunnen helpen, of een linkje geven waar uitleg over dit onderwerp wordt gegeven?

Toevoeging op 12/02/2020 20:54:28:

oh, en lege vakjes zijn 0. (niet Null)
 
PHP hulp

PHP hulp

26/09/2020 07:52:17
 
Michael -

Michael -

12/02/2020 21:00:10
Quote Anchor link
Waarom wil je dit? Waarom tel je ze niet gewoon bij elkaar op het moment dat je ze ophaalt?
Je kunt de kolommen tellen met COUNT() of alle resultaten tellen met mysqli_num_rows()
Dat zou je met UPDATE je veld Totaal kunnen bijwerken.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

12/02/2020 21:03:35
Quote Anchor link
Het klinkt nog wat stoffig allemaal. Zou je misschien in normaal Nederlands kunnen uitleggen wat je graag zou willen maken zonder woorden als tabel of kolommen? Ik twijfel namelijk zeer of je wel op de goede weg bent en of je wel de juiste termen gebruikt.
 
Thom Stofberg

Thom Stofberg

12/02/2020 21:56:42
Quote Anchor link
ja michael, zoiets wil ik inderdaad, maar ben net begonnen met php. weet nog niet zo goed hoe alles werkt.
Kom dan denk ik op zoiets uit. Maar weet dus niet zo goed hoe ik de opgehaalde data dan verwerk.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
30
31
32
33
34
35
36
<?php

$sql
= "SELECT * FROM VANDAAG";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        
$Session="TOTAAL";
//id
$DATAX= ????;
//soort
$DATAY= ????;
//aantal
$DATAZ= ????;

$sql = "SHOW COLUMNS FROM $Session LIKE '$DATAY'";
$result=(mysqli_query($conn, $sql));
if(mysqli_num_rows($result) >0){} else {
$sql = "ALTER TABLE $Session ADD COLUMN $DATAY INT DEFAULT '0' NOT NULL";
if (mysqli_query($conn, $sql)) {} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);}}

$sql = "SELECT id FROM $Session WHERE id='$DATAX'";
$result=(mysqli_query($conn, $sql));
if(mysqli_num_rows($result) >0){} else {
$sql = "INSERT INTO $Session (id) VALUES ('$DATAX')";
if (mysqli_query($conn, $sql)) {} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);}}

$sql = "UPDATE $Session SET $DATAY=$DATAZ WHERE id='$DATAX'";
if (mysqli_query($conn, $sql)) {
echo "DATA ADDED SUCCESFULLY <br>";} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);}
}}

?>
 
Frank Nietbelangrijk

Frank Nietbelangrijk

12/02/2020 22:02:40
Quote Anchor link
Thom,

Kolommen horen niet dagelijks gemaakt, veranderd of verwijderd te worden.
Records daarentegen wel...

Misschien moet je je eens verdiepen in Database normalisatie?
 
Michael -

Michael -

12/02/2020 22:15:19
Quote Anchor link
Als ik SHOW en ADD en ALTER zie, dan gaat er iets niet goed. Dit is niet hoe je met een database om moet gaan.
Misschien is het handig even uit te leggen wat je wil.
Zoals ik zei kun het Totaal namelijk prima uitrekenen op het moment dat je dit nodig hebt, en dit hoef je dus niet in een database weg te schrijven.
Leer trouwens ook in te springen (tab of meerdere spaties) en variabelen buiten quotes, dit maakt het veel aangenamer om te lezen.
Regel 9 tm 15 is ook zinloos op deze manier.

Toevoeging op 12/02/2020 22:25:34:

Mogelijk moet je meer aan zoiets denken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$sql
= "SELECT
        SUM(CASE WHEN id = 'DATAX' THEN 1 ELSE 0 END) AS aantal_x,
        SUM(CASE WHEN id = 'DATAY' THEN 1 ELSE 0 END) AS aantal_y,
        SUM(CASE WHEN id = 'DATAZ' THEN 1 ELSE 0 END) AS aantal_z
    FROM
        vandaag"
;

$result = $conn->query($sql);
if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();
    echo 'X ' . $row['aantal_x'] . '<br>';
    echo 'Y ' . $row['aantal_y'] . '<br>';
    echo 'Z ' . $row['aantal_z'] . '<br>';
}

?>

Ik weet niet of het zo kan, maar als voorbeeld. Iemand met meer SQL skills kan je hier wel mee helpen ;-)

EDIT: Ah kijk het werkt: Klik voor fiddle
Gewijzigd op 12/02/2020 22:35:30 door Michael -
 
Thomas van den Heuvel

Thomas van den Heuvel

13/02/2020 23:38:51
Quote Anchor link
En als je gewoon met types en aantal werkt? Dan kun je toch een SUM doen en GROUPen op type? Lijkt me allemaal wat sneller gaan? En het is dan in principe niet relevant wat voor types het allemaal zijn, je hoeft hier dan in ieder geval niet allemaal aparte kolommen voor te maken.
Gewijzigd op 13/02/2020 23:39:21 door Thomas van den Heuvel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.