Eerste karakter een cijfer met LIKE
Ik zit momenteel met een probleem, ik probeer door middel van het gehele alfabet namen te sorteren. Dit doe ik door een letter mee te geven in de url en daarna de lijst met namen te laten zien die met de in url meegegeven letter beginnen.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$qName = $db->sql_query("
SELECT user_name,
user_id
FROM " . TABLE_USERS . "
WHERE user_name LIKE '" . $db->escape($_GET['letter']) . "%'
ORDER BY user_name ASC
");
?>
$qName = $db->sql_query("
SELECT user_name,
user_id
FROM " . TABLE_USERS . "
WHERE user_name LIKE '" . $db->escape($_GET['letter']) . "%'
ORDER BY user_name ASC
");
?>
Nu heb ik ook een optie om namen te sorteren op cijfers, maar dan spreek ik niet over één cijfer maar om alle cijfers (dus 0 t/m 9).
In plaats van dat de $_GET['letter'] een letter uit het alfabet is, gebruik ik voor het ophalen van namen met cijfers 'numbers'.
Er wordt momenteel gecontroleerd op of $_GET['letter'] 'numbers' is, zoniet dan moet er in de bovenstaan de query gezocht worden op de naam met de letter is in $_GET['letter'] staat.
Echter krijg ik het niet voor elkaar om in bovenstaande query te zoeken op een naam met begin van een cijfer.
Ook heb ik op dit probleem gezocht op internet maar ik kan hierover weinig vinden of het is niet wat ik zoek.
Wel deze: http://lists.mysql.com/mysql/218060 maar ik weet niet hoe ik hem moet toepassen en/of het wel goed is voor wat ik bedoel aangezien de LIKE moet beginnen met 0, 1, 2, 3, 4, 5, 6, 7, 8 of 9
Weet iemand hiervoor een oplossing en kan mij tips geven hoe ik mijn probleem moet oplossen?
Gewijzigd op 01/01/1970 01:00:00 door Steef
is de wildcard niet een '*' in sql :S
Dat maakt voor de rest niet zo veel uit of dat een % of een * is naar mijn weten...
http://www.tizag.com/mysqlTutorial/mysqlwhere.php
word over de wildcards gesproken...
word over de wildcards gesproken...
Gewijzigd op 01/01/1970 01:00:00 door koen
En in de link dit jij geeft gaat het over de SELECT statement, niet over de LIKE http://www.sql-tutorial.net/SQL-LIKE.asp
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// Connect to MySQL
// Insert a row of information into the table "example"
$result = mysql_query("SELECT * FROM example WHERE age LIKE '2%' ")
or die(mysql_error());
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
// Print out the contents of each row
echo $row['name']." - ".$row['age']. "<br />";
}
?>
// Connect to MySQL
// Insert a row of information into the table "example"
$result = mysql_query("SELECT * FROM example WHERE age LIKE '2%' ")
or die(mysql_error());
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
// Print out the contents of each row
echo $row['name']." - ".$row['age']. "<br />";
}
?>
staat toch in de pagina die ik stuurde
Maar nu voor ieder willekeurig cijfer dus 0 t/m 9
WHERE kolom LIKE '%' ??
Nee want dan kan de eerste karakter toch ook een letter zijn en dat wil ik niet, het mag alleen 0 t/m 9 zijn.
http://www.fmforums.com/forum/showtopic.php?tid/200196/
is '#' een nr wildcard voor 1 plaats.
dus dan
als ik goed heb gelezen op : is '#' een nr wildcard voor 1 plaats.
dus dan
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// Connect to MySQL
// Insert a row of information into the table "example"
$result = mysql_query("SELECT * FROM example WHERE age LIKE '#%' ")
or die(mysql_error());
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
// Print out the contents of each row
echo $row['name']." - ".$row['age']. "<br />";
}
?>
// Connect to MySQL
// Insert a row of information into the table "example"
$result = mysql_query("SELECT * FROM example WHERE age LIKE '#%' ")
or die(mysql_error());
// keeps getting the next row until there are no more to get
while($row = mysql_fetch_array( $result )) {
// Print out the contents of each row
echo $row['name']." - ".$row['age']. "<br />";
}
?>
Gewijzigd op 01/01/1970 01:00:00 door koen
Als je mijn eerste post goed doorleest lees je dat het inmiddels al wel werkt met letters die ik ophaal door middel van index.php?letter=A bijvoorbeeld.
Nu wil ik dat als je index.php?letter=numbers hebt dat je dan alle namen die met een willekeurig cijfer beginnen (dus 0 t/m 9) door een query uit de tabel gehaald worden.
Het # wat je hierboven laat zien werkt ook niet, een # staat namelijk ook voor ieder willekeurig karakter (dus cijfers en letters)
% = maakt niet uit hoeveel tekens dus als je bijvoorbeeld de namen Berhard en Bernard wilt opahelen doe je LIKE ber%, dan haalt ie beide namen uit de tabel
# = 1 teken die willekeurig kan zijn dus als je bijvoorbeeld de namen Berhard en Bernard wilt ophalen doe je LIKE ber#ard, dan haalt ie beide namen uit de tabel
dat je een variabele vult met een preg_match op '0123456789' en dan where : 'variabele'
werkt dat?
http://dev.mysql.com/doc/refman/5.0/en/regexp.html
Nu WHERE user_name REGEXP '^[0-9]'
Hij maakt alleen nu een aparte query zodra er numbers in de url is mee gegeven maar dat maakt niet uit!
EDIT: @Lauren, ik had hem nu inmiddels ook al gevonden, googlen op preg_match in WHERE (in Google) deed in dit geval ook wonderen. Toch bedankt voor het meedenken!
Gewijzigd op 01/01/1970 01:00:00 door Steef