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?
[size=xsmall]Toevoeging op 12/02/2020 20:54:28:[/size]
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.
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.
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.
<?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);}
}}
?>
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.
[size=xsmall]Toevoeging op 12/02/2020 22:25:34:[/size]
Mogelijk moet je meer aan zoiets denken:
<?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 ;-)
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.