Limiet
Ik hoop dat iemand mij kan helpen ik heb een request systeem gemaakt alleen nu wil ik dat als iets al is aangevraagd dat die dan in 60 minuten nite meer aangevraagd kan worden.
Ik hoop dat iemand mij hiermee kan helpen.
Alvast bedankt
En dan kan je met deze query kijken of deze binnen een uur valt.
Gaat dat lukken, denk je?
Toevoeging op 14/09/2022 20:18:31:
ik heb nu dit maar dat lukt niet:
$records = mysqli_query($db,"select artiest from verzoeken WHERE tijd + INTERVAL 1 HOUR > NOW()"); // fetch data from database
while($data = mysqli_fetch_array($records))
{
?>
<META HTTP-EQUIV="refresh" CONTENT="0;URL=../geblokt/gebruiker-geblokt.html">
Gewijzigd op 14/09/2022 20:25:10 door - Ariën -
Heeft u toevallig een voorbeeld
mysqli_num_rows en een if-constructie.
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
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
<?php
include '';
$id = $_GET['id']; // get id through query string
$artiest = mysqli_real_escape_string($conn, $_REQUEST['artiest']);
if ($conn->connect_error) {
//breek de code hier af als de verbinding mislukt
die("Verbinding met de databank is mislukt: " . $conn->connect_error);
}
//selecteer alle rijen van de tabel 'articles'
$sql = "select artiest='$artiest' from verzoeken WHERE tijd + INTERVAL 1 HOUR > NOW()";
//bewaar het resultaat van de zoekopdracht
$result = $conn->query($sql);
//als het aantal rijen groter is dan 0, zet de rijen dan om in HTML
if ($result->num_rows > 0) {
// maak een "loop" door alle rijen
while($row = $result->fetch_assoc()) {
?>
include '';
$id = $_GET['id']; // get id through query string
$artiest = mysqli_real_escape_string($conn, $_REQUEST['artiest']);
if ($conn->connect_error) {
//breek de code hier af als de verbinding mislukt
die("Verbinding met de databank is mislukt: " . $conn->connect_error);
}
//selecteer alle rijen van de tabel 'articles'
$sql = "select artiest='$artiest' from verzoeken WHERE tijd + INTERVAL 1 HOUR > NOW()";
//bewaar het resultaat van de zoekopdracht
$result = $conn->query($sql);
//als het aantal rijen groter is dan 0, zet de rijen dan om in HTML
if ($result->num_rows > 0) {
// maak een "loop" door alle rijen
while($row = $result->fetch_assoc()) {
?>
<META HTTP-EQUIV="refresh" CONTENT="0;URL=limit1.php">
Niet tig meta-tags plaatsen.
Gewijzigd op 14/09/2022 21:23:05 door - Ariën -
Dan zegt de voorgestelde query:
WHERE tijd + INTERVAL 1 HOUR > NOW()
dus pak voor elk record het veld "tijd" en tel daar 1 uur bij op. Vergelijk dat met de huidige tijd.
Dat zijn dus 15000 berekeningen voor je database.
Draaien we het om:
WHERE tijd > NOW() - INTERVAL 1 HOUR
Dan is het 1 berekening, namelijk huidige tijd - 1 uur en de uitkomst van deze ene berekening kan vervolgens tegen de 15000 waarden aan gehouden worden om te vergelijken.
Als je dan ook nog eens een index op die kolom hebt, wordt het nog eenvoudiger voor je database.
Alternatief zou nog zijn om de kolom niet te vullen met het tijdstip "opgevraagd" maar met "geblokt tot" en dan direct bij opslaan de huidige tijd + 1 uur op te slaan.
Toevoeging op 15/09/2022 09:47:29:
Over het probleem zelf:
Je vraagt nu alle records op die geblokt zijn.
stel hij was opgevraagd 15 minuten geleden. Dus WHERE 9:30 + 1 UUR > 9:45
Dat zijn volgens mij nu net de records die je _niet_ wilde hebben.
Dan zou de query volgens mij dus zo moeten worden.
WHERE tijd < NOW() - INTERVAL 1 HOUR
Een whileloop om steeds een redirect te herhalen is overigens vreemd, en ook onnodig.
Aan de hand van het aantal gevonden items, kan je dus prima een foutmelding aangeven met dat een item al op de lijst staat en dus geblokkeerd is. Maar die query optimalisatie is wel weer beter. :-)
Gewijzigd op 15/09/2022 12:01:26 door - Ariën -
- Ariën - op 15/09/2022 12:00:32:
Het ging overigens niet om het ophalen, maar om te kijken of er wel (geblokte items) of geen records zijn.
"... nu wil ik dat als iets al is aangevraagd dat die dan in 60 minuten nite meer aangevraagd kan worden."
Ik vermoed dat hij uitsluitend de items wil tonen die niet geblokkeerd zijn, en die dus nog geselecteerd kunnen worden.
Het enig wat ik Marcel zie doen is dit:
Maar dat is niet meer dan het doorsturen naar een andere pagina. Iets wat je niet via een loop hoeft te doen.
Het komt meer over als een denkfoutje.
Gewijzigd op 15/09/2022 13:14:21 door - Ariën -
Wat ik dus wil is.
Een luisteraar vraag een verzoek aan met een artiest als die artiest is aangevraagd mag hij het komende uur niet meer worden aangevraagd. Tevens wil ik dat de dj zelf de tijd kan invullen hoe lang het moet duren dat het weer mag dus kan ook 2 uur zijn Ik hoop dat het nu wat duidelijker is.
Gewijzigd op 15/09/2022 13:35:53 door Marcel Veenendaal
Kijk hier eerst eens naar door droog te testen in phpMyAdmin of waar je jouw database maar mee beheert.
deze werkt in phpmyadmin
Maar nu wil ik als die uur nog niet om is dat de pagina word doorgelinkt
Gewijzigd op 15/09/2022 15:04:51 door Marcel Veenendaal
Aan de hand daarvan kan je dus bepalen met mysqli_num_rows() dan als het aantal groter is dan 0, dat het om een item gaat die al aangevraagd is.
En waarom zou je willen doorsturen, en niet gewoon netjes een foutmelding geven op dezelfde pagina?
Gewijzigd op 15/09/2022 15:10:41 door - Ariën -
ja dat is wel slimmer idd foutmelding geven
Vooral vanwege de F5'ers die anders op de errorpagina blijven hangen.
select * from verzoeken WHERE artiest='$artiest' and tijd >= NOW() - INTERVAL 1 HOUR
nu wil ik alleen nog dat hij het uur ophaalt uit een andere database genaamd aantal, dat lukt nog niet echt
Ik denk dan eerder na dat je dit beter in PHP kan afhandelen met strtotime() in plaats van deze query.