Alleen de letter A, alleen de letter B...
Hallo :)
Ik heb dus een script waarmee ik dingen uit de Database kan halen, voor een item database van Runescape. Maar om het overzichtelijker te maken wil ik dat op 1 pagina alleen maar de items die beginnen met een B enz. Wel kan ik het gewoon op 1 pagina sorteren op A, B dat het achter elkaar komt te staan enzo.
Maar hoe doe ik dat? Alvast bedankt :)
Ik heb dus een script waarmee ik dingen uit de Database kan halen, voor een item database van Runescape. Maar om het overzichtelijker te maken wil ik dat op 1 pagina alleen maar de items die beginnen met een B enz. Wel kan ik het gewoon op 1 pagina sorteren op A, B dat het achter elkaar komt te staan enzo.
Maar hoe doe ik dat? Alvast bedankt :)
SELECT kolom, kolom2 FROM tabel WHERE kolom LIKE 'a%'
SELECT kolom, kolom2 FROM tabel WHERE kolom LIKE 'b%'
SELECT kolom, kolom2 FROM tabel WHERE kolom LIKE 'c%'
SELECT kolom, kolom2 FROM tabel WHERE kolom LIKE 'b%'
SELECT kolom, kolom2 FROM tabel WHERE kolom LIKE 'c%'
En natuurlijk kun je hier voor 'A' ook een variabele invullen.
dit is simpel, niet goed beveiligd, maar werkt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$letters = range('a', 'z');
echo '<p>Kies een letter';
foreach ($letters as $letter)
{
echo ' - <a href="?letter=' . $letter . '">' . $letter . '</a>';
}
if (!empty($_GET['letter']))
{
$query = 'SELECT * FROM tabel WHERE kolom LIKE "' . $_GET['letter'] . '%"';
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{
//Hier je zooi echoën
}
}
?>
$letters = range('a', 'z');
echo '<p>Kies een letter';
foreach ($letters as $letter)
{
echo ' - <a href="?letter=' . $letter . '">' . $letter . '</a>';
}
if (!empty($_GET['letter']))
{
$query = 'SELECT * FROM tabel WHERE kolom LIKE "' . $_GET['letter'] . '%"';
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{
//Hier je zooi echoën
}
}
?>
@Djemo: nee dat is het zeker niet. Groeperen met GROUP BY doe je altijd op een of meedere kolomnamen en in de meeste gevallen alleen als je ook een aggregate functie (zoals bijv. COUNT() of SUM()) in je functie opneemt.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Hij werkt :D
Ik heb die van Blanche gepakt.
Ik heb die van Blanche gepakt.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$letter = mysql_real_escape_string($_GET['letter']);
$sql= "
SELECT *
FROM tabel
WHERE SUBSTRING(kolom,1,1) = '".$letter."';
";
?>
$letter = mysql_real_escape_string($_GET['letter']);
$sql= "
SELECT *
FROM tabel
WHERE SUBSTRING(kolom,1,1) = '".$letter."';
";
?>
Deze vind ik anders nog wel het best en werkt waarschijnlijk ook nog sneller:)
GR. mebus
De functie mysql_real_escape_string() heeft hier vrij weinig nut, aangezien je maar te maken hebt met 1 character. Dit zou dus beter zijn:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
if(strlen($_GET['letter']) == 1 && ctype_alpha($_GET['letter']))
{
$letter = strtolower($_GET['letter']);
$sql = "
SELECT kolom
FROM tabel
WHERE LOWER(SUBSTRING(kolom, 1, 1)) = '".$letter."'
";
}
?>
if(strlen($_GET['letter']) == 1 && ctype_alpha($_GET['letter']))
{
$letter = strtolower($_GET['letter']);
$sql = "
SELECT kolom
FROM tabel
WHERE LOWER(SUBSTRING(kolom, 1, 1)) = '".$letter."'
";
}
?>
Zorg even dat je een index op die kolom aanmaakt, dan gaat het een stuk sneller.
Groet,
Arend
Groet,
Arend




