Opzoek naar een heilige MYSQL Query :p
Ik sta met de zelfde vraag al dagen op meerdere forums en niemand heeft mij kunnen helpen.
Phphulp heeft super veel experts en ik ben benieuwd of iemand het antwoord heeft.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
include 'database.php';
$sql = "SELECT COUNT(*) FROM questions";
$result = mysqli_query($connect, $sql);
while ($row=$result->fetch_row()) {
$count = $row[0];
}
$random = rand(1,$count);
$engine = false;
while ($engine == false) {
$sql = "SELECT * FROM questions WHERE RID = '$random'";
$result = mysqli_query($connect, $sql);
while($row = mysqli_fetch_assoc($result)) {
$question = $row["question"];
$answer = $row["answer"];
$status = $row["status"];
$connect->close();
}
if ($status == 'active') {
$engine = true;
} else {
$random = rand(1,$count);
}
}
?>
include 'database.php';
$sql = "SELECT COUNT(*) FROM questions";
$result = mysqli_query($connect, $sql);
while ($row=$result->fetch_row()) {
$count = $row[0];
}
$random = rand(1,$count);
$engine = false;
while ($engine == false) {
$sql = "SELECT * FROM questions WHERE RID = '$random'";
$result = mysqli_query($connect, $sql);
while($row = mysqli_fetch_assoc($result)) {
$question = $row["question"];
$answer = $row["answer"];
$status = $row["status"];
$connect->close();
}
if ($status == 'active') {
$engine = true;
} else {
$random = rand(1,$count);
}
}
?>
Dit werkt prima en krijg de juiste gegevens binnen van een random row.
Het probleem is dat ik meer dan 7.000 rows heb in mijn database.
Ik wil al deze "questions" eerlijk aan de beurt zien komen.
Wanneer een gebruiker de vraag juist beantwoord word er een timestamp achtergelaten in de database.
( 1418058459 )
Mijn vraag is : Hoe kan ik met mijn script mijn tabel sorteren op timestamp ( van oud naar nieuw ) en dan een random row pakken van de top 100 oudste bijvoorbeeld.
Ik hoop dat jullie mij hiermee kunnen helpen, alvast bedankt!@
Gewijzigd op 08/12/2014 21:51:56 door Patrick B
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$random = rand(0,99);
$sql = "SELECT * FROM questions
ORDER BY timestamp
LIMIT 1 OFFSET " .$random;
?>
$random = rand(0,99);
$sql = "SELECT * FROM questions
ORDER BY timestamp
LIMIT 1 OFFSET " .$random;
?>
Niks heiligs aan ;-)
Gewijzigd op 08/12/2014 22:16:01 door Ger van Steenderen
Hehe ... laat dat maar aan Ger over :-)
1418058459
1418076432
1418097888
of
1418097888
1418076432
1418058459
En nog 1 vraagje ger, kan ik mijn "WHERE" er zo in plaatsen ?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$random = rand(0,99);
$sql = "SELECT * FROM questions
WHERE status = active
ORDER BY timestamp
LIMIT 1 OFFSET $random" ;
?>
$random = rand(0,99);
$sql = "SELECT * FROM questions
WHERE status = active
ORDER BY timestamp
LIMIT 1 OFFSET $random" ;
?>
Groeten mysql noob
Gewijzigd op 08/12/2014 22:54:50 door Patrick B
ORDER BY heeft als default ASC, dus je hoeft dat niet specifiek te vermelden tenzij je het anders om wilt.
Een WHERE kan je altijd toevoegen voor de order by.
Toevoeging op 08/12/2014 22:54:38:
Je moet er wel even '' omheen zetten:
Gewijzigd op 08/12/2014 22:52:29 door Ger van Steenderen
Code (php)
1
2
3
2
3
<?php
$sql = "SELECT * FROM questions WHERE status='active' ORDER BY time LIMIT 1 OFFSET '$random'";
?>
$sql = "SELECT * FROM questions WHERE status='active' ORDER BY time LIMIT 1 OFFSET '$random'";
?>
Ik heb toch DESC nodig, hoe geef ik dit aan ?
Groeten
Code (php)
1
2
2
$sql = "SELECT * FROM questions WHERE status='active'
ORDER BY time DESC LIMIT 1 OFFSET $random";
ORDER BY time DESC LIMIT 1 OFFSET $random";
Let op LIMIT werkt met getallen niet met strings!
You rock, thank you sir!
Het KISS principe ;-)