[英]PHP filter a database table column into an A-Z listing
这是到目前为止,我不知道该去哪里:
// print A-Z Filter based on names of companies
$qry = db_select('cloud_computing_capability_data', 'cd');
$qry -> fields('cd', array(
'company',
))
-> orderBy('company', 'ASC');
$names = array('company');
$output = preg_grep('/^[a-z]/i', $names);
print_r( $output);
第二次尝试
// $letter = $_GET['company']
// $regex = '/^'.$letter.'/i';
// if ($letter == '#') $letter = '[0-9]';
// $result = preg_grep($regex, $qry);
我有一个名为cloud_computing_capability_data的表,该列称为company
我需要做的是创建一个AZ列表...因此:
# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
当您单击字母时,如果我单击A,将仅显示一个以A开头的单词的表,如果单击#号,则仅显示以数字开头的单词的表。
我当时正在考虑使用正则表达式来完成此操作,但我不想创建27个不同的页面。 那么,有没有一种方法可以在网址末尾调用字母? 就像创建可以做到这一点的东西
http://mywebsite.com/site/list?letter=A
好吧,您需要首先组织您的想法:html代码将具有链接,每个链接都以常规格式调用字母
php脚本的第一部分将必须为变量分配您将通过链接发送的值
<?
$a=$_GET["letter"];
?>
脚本的第二部分将必须连接到数据库,并使用循环将每一行读取为数组,每次获取数组的位置为“ company”,并且如果字符串的第一个字符
$result=array();
在索引i的循环内
if ($str[0]==$a{
$result[$i]=$query_result;
}
等于$ a然后将其保存到新数组
脚本的第三部分是一个循环,用于打印出最后一个数组
foreach ($result as $value) {
echo $value;}
使用类似于以下代码:
$letter = $_GET['letter'];
$result = $db->prepare("
SELECT *
FROM tableName
WHERE fieldName LIKE :letterToSearch
ORDER BY fieldName ASC
");
$result->bindValue(':letterToSearch', $letter . '%');
$result->execute();
我使用了基本的PDO查询来在字段fieldName
(将其更改为其他名称)中查找结果,该字段以字母A或B开头,或者传递给$letter
您不需要为此使用正则表达式来输出所有字母,首先执行以下操作:
foreach(range('A','Z') as $letter)
{
echo '<a href="directory.php?letter=' . $letter . '">' . $letter . '</a>';
}
然后,在您的directory.php页面上,您需要使用$_GET
来获取字母。
$letter = isset($_GET['letter']) ? mysql_real_escape_string($_GET['letter']) : false;
现在,您已经收到这封信,您只需要选择以它开头的结果即可,可以使用WHERE语句(我不确定您使用的是哪种DB类)。
WHERE `company` LIKE '{$letter}%'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.