Tabel optellen bij andere tabel
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)
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.
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.
Kom dan denk ik op zoiets uit. Maar weet dus niet zo goed hoe ik de opgehaalde data dan verwerk.
Code (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
30
31
32
33
34
35
36
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);}
}}
?>
$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);}
}}
?>
Kolommen horen niet dagelijks gemaakt, veranderd of verwijderd te worden.
Records daarentegen wel...
Misschien moet je je eens verdiepen in Database normalisatie?
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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>';
}
?>
$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 -
Gewijzigd op 13/02/2020 23:39:21 door Thomas van den Heuvel