mysql database array random nummer vanuit id in mysql
Met onderstaande code wil ik van de 233 items in de database 2 willekeurige items laten zien, dit zijn nu altijd 2 opvolgende items. Soms worden geen resultaten getoont, het ID veld is niet altijd oplopend, het kan dus zijn dat id 14 wel bestaat en id 15 niet. Het mooiste zou zijn wanneer er 2 items worden ingeladen met elk een willekeurig id uit de database. Heeft iemand tips hoe ik dit kan aanpakken?
Quote:
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
30
31
32
33
34
35
36
37
38
39
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
30
31
32
33
34
35
36
37
38
39
<?php
$servername = "localhost";
$username = "-";
$password = "-";
$dbname = "-";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$rand = rand(1,230);
$sql = "SELECT transmission_nl, owner, projectname, alias, id, image_01, image_02, image_03, transmission_nl, chassis_nl, shocks_nl, brakes_nl, exhaust_nl, engine_nl, turbo_nl, software_nl, electronics_nl, cooling_nl, wheels_nl, repair_nl, maintenance_nl, remarks_nl FROM car_projects LIMIT 2 OFFSET $rand";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo " <h3>". $row["projectname"]. "</h3> ";
echo " <img src=\"images/portfolio/". $row["alias"]. "/article/". $row["alias"]. "-". $row["image_01"]. ".jpg\"/> ";
}
} else {
echo "0 results";
}
$conn->close();
?>
$servername = "localhost";
$username = "-";
$password = "-";
$dbname = "-";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$rand = rand(1,230);
$sql = "SELECT transmission_nl, owner, projectname, alias, id, image_01, image_02, image_03, transmission_nl, chassis_nl, shocks_nl, brakes_nl, exhaust_nl, engine_nl, turbo_nl, software_nl, electronics_nl, cooling_nl, wheels_nl, repair_nl, maintenance_nl, remarks_nl FROM car_projects LIMIT 2 OFFSET $rand";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo " <h3>". $row["projectname"]. "</h3> ";
echo " <img src=\"images/portfolio/". $row["alias"]. "/article/". $row["alias"]. "-". $row["image_01"]. ".jpg\"/> ";
}
} else {
echo "0 results";
}
$conn->close();
?>
Waarom niet gewoon in de query ORDER BY RAND() met een LIMIT 2?
Ikzelf ben op deze test uitgekomen waaruit blijkt dat een query als: SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `table` stukken sneller is i.c.m een LIMIT en OFFSET query.
Ikzelf moet dit nog eens uittesten met +/- 5.000 records, want je eerder genoemde ORDER BY RAND() gaf me erg vaak steeds dezelfde records door, hoe meer voorwaarden ik eraan toevoegde, wat me geen toeval leek ;-)