Meerdere data uit tabel halen
Maar de Query wordt niet uitgevoerd, wat doe ik niet goed? Ik krijg de tekst "Er zijn geen resultaten gevonden"
Onderstaand de code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
$sql = "SELECT Temp, Datumentijd FROM weerdata ORDER BY Temp DESC LIMIT 1; SELECT Vocht, Datumentijd FROM weerdata ORDER BY Vocht DESC LIMIT 1";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "<table><tr><th></th><th></th><th>Datum en tijd</th></tr>";
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr><td>Temperatuur</td><td>".$row["Temp"]."°C</td><td>".$row["Datumentijd"].</td></tr>";
echo "<tr><td>Vochtigheid</td><td>".$row["Vocht"]."%</td><td>".$row["Datumentijd"]."</td></tr>";
}
echo "</table>";
} else {
echo "Er zijn geen resultaten gevonden";
}
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "<table><tr><th></th><th></th><th>Datum en tijd</th></tr>";
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr><td>Temperatuur</td><td>".$row["Temp"]."°C</td><td>".$row["Datumentijd"].</td></tr>";
echo "<tr><td>Vochtigheid</td><td>".$row["Vocht"]."%</td><td>".$row["Datumentijd"]."</td></tr>";
}
echo "</table>";
} else {
echo "Er zijn geen resultaten gevonden";
}
Gewijzigd op 25/05/2018 22:36:59 door Jan Westdijk
$sql = "SELECT * FROM weerdata ORDER BY Datumtijd DESC LIMIT 1”;
Daarna kun je de velden uit de tabel $row[“Temp”] en $row[“Vocht”] tonen, gebruiken.
Vergeef mijn “ gebruik hier jouw apostrofe-teken.
Code (php)
1
2
3
4
5
2
3
4
5
$sql_temp = "SELECT Temp, Datumentijd FROM weerdata ORDER BY Temp DESC LIMIT 1";
$sql_vocht = "SELECT Vocht, Datumentijd FROM weerdata ORDER BY Vocht DESC LIMIT 1";
$result_temp = $conn->query($sql_temp);
$result_vocht = $conn->query($sql_vocht);
//enz, t/m $row_temp en $row_vocht en die dan in de juiste <tr> gebruiken
$sql_vocht = "SELECT Vocht, Datumentijd FROM weerdata ORDER BY Vocht DESC LIMIT 1";
$result_temp = $conn->query($sql_temp);
$result_vocht = $conn->query($sql_vocht);
//enz, t/m $row_temp en $row_vocht en die dan in de juiste <tr> gebruiken
Die while(...) heeft daar overigens geen zin omdat je toch een limit 1 hebt gedaan. Er is dus altijd maar 1 row (en je hebt al gecontroleerd of er überhaupt rows zijn).
Ik heb nu dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
$sql_temp = "SELECT Temp, Datumentijd FROM weerdata ORDER BY Temp DESC LIMIT 1";
$sql_vocht = "SELECT Vocht, Datumentijd FROM weerdata ORDER BY Vocht DESC LIMIT 1";
$result_temp = $conn->query($sql_temp);
$result_vocht = $conn->query($sql_vocht);
if ($result_temp->num_rows > 0) {
echo "<table><tr><th></th><th></th><th>Datum en tijd</th></tr>";
echo "<tr><td>Temperatuur</td><td>".$row_temp["Temp"]."°C</td><td>".$row_temp["Datumentijd"]."</td></tr>";
echo "<tr><td>Vochtigheid</td><td>".$row_vocht["Vocht"]."%</td><td>".$row_vocht["Datumentijd"]."</td></tr>";
echo "</table>";
} else {
echo "Er zijn geen resultaten gevonden";
}
$sql_vocht = "SELECT Vocht, Datumentijd FROM weerdata ORDER BY Vocht DESC LIMIT 1";
$result_temp = $conn->query($sql_temp);
$result_vocht = $conn->query($sql_vocht);
if ($result_temp->num_rows > 0) {
echo "<table><tr><th></th><th></th><th>Datum en tijd</th></tr>";
echo "<tr><td>Temperatuur</td><td>".$row_temp["Temp"]."°C</td><td>".$row_temp["Datumentijd"]."</td></tr>";
echo "<tr><td>Vochtigheid</td><td>".$row_vocht["Vocht"]."%</td><td>".$row_vocht["Datumentijd"]."</td></tr>";
echo "</table>";
} else {
echo "Er zijn geen resultaten gevonden";
}
Gewijzigd op 25/05/2018 22:36:06 door Jan Westdijk
Zie ook de Veelgestelde Vragen.
Toevoeging op 25/05/2018 22:39:47:
Een query geeft enkel een resource en als het fout gaat een false-boolean, en geen array met data. Je zult $result_temp->fetch_assoc() moeten gebruiken.
Maar waarom heb je twee queries?
Gewijzigd op 25/05/2018 22:51:11 door - Ariën -
Een <tr> met max. Vocht en tijdstip.
Een <tr> met max. Luchtdruk en tijdstip, enz...
En daarna dan fetchen.
Ga ik proberen, ik meldt me weer als het niet lukt.
Oke, succes!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
echo "<table><tr><th></th><th></th><th>Datum en tijd</th></tr>";
$sql_temp = "SELECT Temp, Datumentijd FROM weerdata ORDER BY Temp DESC LIMIT 1";
$result_temp = $conn->query($sql_temp);
if ($result_temp->num_rows > 0) {
$row_temp = $result_temp->fetch_assoc();
echo "<tr><td>Temperatuur</td><td>".$row_temp["Temp"]."°C</td><td>".$row_temp["Datumentijd"]."</td></tr>";
}
$sql_vocht = "SELECT Vocht, Datumentijd FROM weerdata ORDER BY Vocht DESC LIMIT 1";
$result_vocht = $conn->query($sql_vocht);
if ($result_vocht->num_rows > 0) {
$row_vocht = $result_vocht->fetch_assoc();
echo "<tr><td>Vochtigheid</td><td>".$row_vocht["Vocht"]."%</td><td>".$row_vocht["Datumentijd"]."</td></tr>";
}
echo "</table>";
$sql_temp = "SELECT Temp, Datumentijd FROM weerdata ORDER BY Temp DESC LIMIT 1";
$result_temp = $conn->query($sql_temp);
if ($result_temp->num_rows > 0) {
$row_temp = $result_temp->fetch_assoc();
echo "<tr><td>Temperatuur</td><td>".$row_temp["Temp"]."°C</td><td>".$row_temp["Datumentijd"]."</td></tr>";
}
$sql_vocht = "SELECT Vocht, Datumentijd FROM weerdata ORDER BY Vocht DESC LIMIT 1";
$result_vocht = $conn->query($sql_vocht);
if ($result_vocht->num_rows > 0) {
$row_vocht = $result_vocht->fetch_assoc();
echo "<tr><td>Vochtigheid</td><td>".$row_vocht["Vocht"]."%</td><td>".$row_vocht["Datumentijd"]."</td></tr>";
}
echo "</table>";
Dan heb ik nog een vraag, de Datumentijd wordt nu weergegeven als: YYYY-MM-DD hh:mm:ss
In de database tabel heeft de kolom "Datumentijd" de waarde "datetime"
Is het mogelijk om bijvoorbeeld alleen MM-DD eruit te halen als datum bij een max. temp.
Je kunt de datum nog op elk moment voor het weergeven (aan de PHP-zijde) formatteren, dit zou ik niet al in SQL vastleggen. In zekere zin is het ook belangrijker dat je de gewenste informatie selecteert en ophaalt, en niet zozeer hoe deze er uitziet. Natuurlijk haal je de informatie in de meest ideale situatie op zoals je deze gaat gebruiken, maar dat hoeft niet per se. Maar in dat geval, als het uiterlijk wel kan verkeren, wil je waarschijnlijk niet op voorhand vastleggen hoe deze er (precies) uitziet, vooral niet als deze over tijd zou kunnen veranderen. Idealiter verander je dit voorkomen dan in een andere of hogere laag in je applicatie, en niet rechtstreeks in de query.
Er zijn legio mogelijkheden om datums en tijden te formatteren, zo is daar de DateTime klasse, maar je zou ook gewoon de date() functie kunnen gebruiken.
En sorry dat ik dit zo zeg, maar je bent al met een geavanceerd onderwerp als databases bezig, maar bent nog niet bekend met een (simpel(er)) onderwerp als datumformattering? :/
Gewijzigd op 26/05/2018 10:06:21 door Thomas van den Heuvel
Thomas van den Heuvel op 26/05/2018 10:05:42:
Dit zou ik persoonlijk niet met een SQL-functie doen. Dit zou namelijk inhouden dat je de query elke keer inhoudelijk zou moeten aanpassen wanneer je besluit dat je je datums anders wilt formatteren (en dit kan misschien ook afhangen van wie de site bekijkt).
Persoonlijk zou ik er wel voor kiezen. Je kan die formattering eventueel ook in een config-file opslaan, of als preference voor gebruikers. Of je het bij MySQL of PHP legt zal naar mijn idee niet uitmaken. Het is net wat je persoonlijk lekkerder vindt werken.
De Datetime kolom uit de databse gebruik ik ook voor diverse grafieken, ik kan ervoor kiezen om aparte kolommen te maken in de tabel en deze dan gebruiken in de SELECT queries voor de html-tabellen in de website.
Dit project is voor mij een groot test project, ik probeer ook nog om Wordpress te gebruiken, maar zoals jullie wel zullen weten, is direct php-en niet mogelijk, en maak ik dus ook nog functies aan in het functions.php bestand van Wordpress om dan met shortcodes de boel te tonen op de website.
- Ariën - op 26/05/2018 10:21:27:
Het is net wat je persoonlijk lekkerder vindt werken.
Ja en nee, het betreft presentatie van data, dan zou je ook verwachten dat dat, net zoals het escapen van output enzo, in de presentatie-laag (of i.i.g. vlak voor weergave) wordt geregeld.
Je kunt het inderdaad op meerdere plaatsen regelen, maar het "finalizen" van output gebeurt wat mij betreft niet al in de database.
EDIT Dit is in zekere zin ook de
Regel het waar je wilt, maar zorg dat je hier consistent in bent en argumenten hebt voor de gekozen aanpak.
Gewijzigd op 26/05/2018 13:49:08 door Thomas van den Heuvel