Hallo allemaal,

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
Opslaan in de database met de huidige datum en tijd uit NOW().

En dan kan je met deze query kijken of deze binnen een uur valt.


SELECT iets, dit, dat
FROM tabel
WHERE last_used + INTERVAL 1 HOUR > NOW() 


Gaat dat lukken, denk je?
Ik ga t proberen bedankt alvast als het niet lukt laat ik wat weten

[size=xsmall]Toevoeging op 14/09/2022 20:18:31:[/size]

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">
<?php
}
?>
Je moet juist tellen of het aantal groter is dan 0. Nu haal je alles op, wat totaal wat anders is.
[php]mysqli_num_rows[/php] en een if-constructie.
Ik heb hem nu zo.


<?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()) {



?>

<META HTTP-EQUIV="refresh" CONTENT="0;URL=limit1.php">
<?php
}
}
?>
Waarom nog een loop? Je wilt enkel tellen.
Niet tig meta-tags plaatsen.
Even los van het probleem zelf: stel dat je 15000 records in je lijst hebt staan.

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.

[size=xsmall]Toevoeging op 15/09/2022 09:47:29:[/size]

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.
Ivo is goed wakker :-) * thumbs up *

Dan zou de query volgens mij dus zo moeten worden.

WHERE tijd < NOW() - INTERVAL 1 HOUR
Het ging overigens niet om het ophalen, maar om te kijken of er wel (geblokte items) of geen records zijn.
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. :-)

Reageren