Random rij, zonder herhaling
Ben heel erg benieuwd of jullie het antwoord weten, ik zou het zelf namelijk echt niet weten.
Alvast bedankt!
Groeten
Deze nummers kun je vervolgens opslaan in de database of in een sessie bewaren en de volgende keer weer raadplegen. de nummers die al gevallen zijn verwerk je in onderstaande query tussen de haakjes achter WHERE NOT IN. Hierdoor zal de query die nummers skippen. (in het voorbeeld zullen de nummers 10, 102 en 348 overgeslagen worden).
Gewijzigd op 28/07/2013 12:08:01 door Frank Nietbelangrijk
Ik snap inderdaad wat je bedoelt, en heb ook al veel wat dit soort dingen geprobeerd. Echter weet ik niet precies hoe ik dus de ID's in een array krijg en vervolgens in bijv. een session, waardoor ik ze tussen de haakjes van NOT IN kan plaatsen. Zou je daar misschien nog wat uitleg over kunnen geven?
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
40
41
42
43
44
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
40
41
42
43
44
<?php
// start sessions
session_start();
// als id_history bestaat dan halen we de id's uit deze array en verwerken die in het WHERE gedeelte van de query
$wherenotin = '';
if(isset($_SESSION['id_history']))
{
$wherenotin = ' WHERE `id` NOT IN(' . implode(',', $_SESSION['id_history']) . ')';
}
// voer de query uit
$query = "SELECT * FROM mytable " . $wherenotin . " ORDER BY RAND() lIMIT 10";
$result = mysql_query($query, $link);
// laat ons zien welke query we hebben
echo $query;
// als de query gelukt is en we rijen beschikbaar hebben
if($result && mysqli_num_rows($result) > 0)
{
// een nieuwe lege array
$ids = array();
while($row = mysqli_fetch_assoc($result)) {
//voeg het id van deze rij toe aan onze array
$ids[] = $row['id'];
}
// nu we een array hebben met de rijen die random gekozen zijn moeten we die toevoegen aan de sessie
if(isset($_SESSION['id_history']))
{
// voeg de nieuwe array toe aan de reeds bestaande array.
$_SESSION['id_history'] = array_merge($_SESSION['id_history'], $ids);
}
else
{
// de eerste keer is er nog geen array $_SESSION['id_history'] dus dan maken we hem voor het eerst aan.
$_SESSION['id_history'] = ids;
}
}
?>
// start sessions
session_start();
// als id_history bestaat dan halen we de id's uit deze array en verwerken die in het WHERE gedeelte van de query
$wherenotin = '';
if(isset($_SESSION['id_history']))
{
$wherenotin = ' WHERE `id` NOT IN(' . implode(',', $_SESSION['id_history']) . ')';
}
// voer de query uit
$query = "SELECT * FROM mytable " . $wherenotin . " ORDER BY RAND() lIMIT 10";
$result = mysql_query($query, $link);
// laat ons zien welke query we hebben
echo $query;
// als de query gelukt is en we rijen beschikbaar hebben
if($result && mysqli_num_rows($result) > 0)
{
// een nieuwe lege array
$ids = array();
while($row = mysqli_fetch_assoc($result)) {
//voeg het id van deze rij toe aan onze array
$ids[] = $row['id'];
}
// nu we een array hebben met de rijen die random gekozen zijn moeten we die toevoegen aan de sessie
if(isset($_SESSION['id_history']))
{
// voeg de nieuwe array toe aan de reeds bestaande array.
$_SESSION['id_history'] = array_merge($_SESSION['id_history'], $ids);
}
else
{
// de eerste keer is er nog geen array $_SESSION['id_history'] dus dan maken we hem voor het eerst aan.
$_SESSION['id_history'] = ids;
}
}
?>
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
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
<?php
session_start();
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$ids = explode(',', $_SESSION['used_ids']);
// zorg dat de ids die in de session staan niet worden meegenomen
$query = "SELECT * FROM mytable WHERE id NOT IN(" . implode(',', $ids) . ") ORDER BY RAND() LIMIT 1";
if ($result = $mysqli->query($query)) {
/* fetch associative array */
$row = $result->fetch_assoc();
echo $row['name'];
// blablabla
// zet de id in de array
$ids[] = $row['id'];
$result->free();
}
$_SESSION['used_ids'] = implode(',', $ids);
/* close connection */
$mysqli->close();
?>
session_start();
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$ids = explode(',', $_SESSION['used_ids']);
// zorg dat de ids die in de session staan niet worden meegenomen
$query = "SELECT * FROM mytable WHERE id NOT IN(" . implode(',', $ids) . ") ORDER BY RAND() LIMIT 1";
if ($result = $mysqli->query($query)) {
/* fetch associative array */
$row = $result->fetch_assoc();
echo $row['name'];
// blablabla
// zet de id in de array
$ids[] = $row['id'];
$result->free();
}
$_SESSION['used_ids'] = implode(',', $ids);
/* close connection */
$mysqli->close();
?>
Toevoeging op 28/07/2013 13:23:32:
Oh, Frank was me voor :)
Gewijzigd op 28/07/2013 13:23:45 door Koen Vlaswinkel
Bedankt voor jullie reacties, het is nu gelukt!