簡體   English   中英

PHP將數據庫表列過濾到AZ列表中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM