Meerdere data uit tabel halen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan Westdijk

Jan Westdijk

25/05/2018 20:46:59
Quote Anchor link
Ik wil zowel de max.Temp als de max.Vocht uit de tabel "weerdata" halen met het tijdstip, ik heb nu 2 sql statements achter elkaar gezet.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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"]."&deg;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
 
PHP hulp

PHP hulp

20/04/2024 13:06:51
 
Jan te Pas

Jan te Pas

25/05/2018 21:33:49
Quote Anchor link
Selecteer de laatste datum uit de tabel
$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.
 
Rob Doemaarwat

Rob Doemaarwat

25/05/2018 21:46:13
Quote Anchor link
Je kunt niet twee statements tegelijk uitvoeren. Maak er dus gewoon 2 losse statements van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

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).
 
Jan Westdijk

Jan Westdijk

25/05/2018 22:22:58
Quote Anchor link
Hallo Rob, bedankt voor je hulp. Het werkt nog niet, hoe moet ik die $result_temp en $result_vocht schrijven in het if statement.

Ik heb nu dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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"]."&deg;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
 
- Ariën  -
Beheerder

- Ariën -

25/05/2018 22:30:37
Quote Anchor link
Kan je jouw code tussen code-tags zetten?
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 -
 
Jan Westdijk

Jan Westdijk

25/05/2018 22:50:54
Quote Anchor link
Ik wil een tabel maken met in iedere <tr> een andere weerdata, dus een <tr> met de max. Temp en tijdstip.
Een <tr> met max. Vocht en tijdstip.
Een <tr> met max. Luchtdruk en tijdstip, enz...
 
- Ariën  -
Beheerder

- Ariën -

25/05/2018 22:52:07
Quote Anchor link
Dan volstaat een enkele querie ook.
En daarna dan fetchen.
 
Jan Westdijk

Jan Westdijk

25/05/2018 22:56:38
Quote Anchor link
Ga ik proberen, ik meldt me weer als het niet lukt.
 
- Ariën  -
Beheerder

- Ariën -

25/05/2018 23:00:03
Quote Anchor link
Oke, succes!
 
Rob Doemaarwat

Rob Doemaarwat

25/05/2018 23:21:08
Quote Anchor link
Volgens mij is het de bedoeling om de max. temp + tijdstip boven water te krijgen, en de max. vocht + tijdstip. Die hoeven niet perse op hetzelfde tijdstip te vallen (lijkt me). Je kunt dat wel in een enkel statement knutselen (omdat het kan, niet omdat het handig is), maar het lijkt me makkelijker om er gewoon 2 aparte dingen van te maken.
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
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"]."&deg;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>";
 
Jan Westdijk

Jan Westdijk

25/05/2018 23:33:49
Quote Anchor link
Bedankt Rob, dit klopt wat je zegt. Dit voorbeeld werkt en kan ik gebruiken ook voor de andere weerdata zoals: Windsnelheid en neerslag.

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.
 
Davier doe

Davier doe

26/05/2018 00:17:21
 
Thomas van den Heuvel

Thomas van den Heuvel

26/05/2018 10:05:42
Quote Anchor link
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).

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
 
- Ariën  -
Beheerder

- Ariën -

26/05/2018 10:21:27
Quote Anchor link
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.
 
Jan Westdijk

Jan Westdijk

26/05/2018 10:29:14
Quote Anchor link
Ik probeer te leren waarvan ik mee bezig ben, ik waardeer jullie reacties. Ben zelf een beginner met PHP en MYSQL.
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

26/05/2018 11:11:32
Quote Anchor link
- 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 "beste" meest logische plaats, zodat, als je dit wilt wijzingen niet naar template > php code > databaselaag > query een formattering hoeft terug te zoeken maar dat dit direct staat op (of vlakbij) de plek waar je dit (ook zou) verwacht(en).

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
 



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.