检查DB中的所有扩展名

时间:2014-09-09 12:45:19

标签: php

我有一个名为“document_name”的数据库。 在该列中有数千行文档名称,如:

kfhidfs.doc
kjfdjdf.png
dsdiusd.exe
etc.
etc.

现在我想了解用户过去上传的扩展程序。 所以,我选择alle行:

$sql = "SELECT document_name FROM docs";
$query = mysql_query($sql);
while($fetch_doc = mysql_fetch_assoc($query)) {

我知道我可以使用EXPLODE拆分名称和扩展名,例如:

// Example 1
$doc = $fetch_doc['document_name'];
$piece = explode(".", $doc);
echo $piece[0]; // document name
echo $piece[1]; // extension

但现在我只想看到每个分机最大值。 1次,因为我想知道扩展名在DB中,我不想知道有多少。

但我该如何安排呢?

3 个答案:

答案 0 :(得分:2)

将它们添加到数组中,只有它们不在那里时才会出现:

$extensions = array();
while($fetch_doc = mysql_fetch_assoc($query)) {
    $doc = $fetch_doc['document_name'];
    $piece = explode(".", $doc);
    $extension = $piece[1];
    if (!in_array($extension, $extensions) {
        $extensions[] = $extension;
    }
}
// Here $extensions is an array of the different extensions, each present only once

答案 1 :(得分:1)

您可以使用SQL来实现这一点,最有可能比PHP更强大。

使用SUBSTRING_INDEXGROUP BY

SELECT 
  SUBSTRING_INDEX(SUBSTRING_INDEX(document_name,',',-2),',',1) AS extension 
FROM docs
GROUP BY extension

这假设文件扩展名

之前只有一个.

您可以将此查询与PHP一起使用:

$sql = "SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(document_name,',',-2),',',1) AS extension FROM docs GROUP BY extension";
$query = mysql_query($sql);
while($extension = mysql_fetch_assoc($query)) {
  var_dump($extension);
}

顺便说一句:

  

自PHP 5.5.0起,不推荐使用原始的mysql扩展,不建议用于编写新代码,因为将来会删除它。相反,应该使用mysqli或PDO_MySQL扩展。另请参阅MySQL API概述,以便在选择MySQL API时获得进一步的帮助。

http://php.net/manual/en/intro.mysql.php

答案 2 :(得分:0)

你可以这样做:

$extensions = array();
while($fetch_doc = mysql_fetch_assoc($query)) {
  $doc = $fetch_doc['document_name'];
  $piece = explode(".", $doc);
  $extensions[$piece[1]] = true;
}

foreach($extensions AS $key=>$value) {
  echo $key . "<br />";
}

通过这种方式,您可以将每个扩展名添加到数组中(一个键只能存在一次,因此您只能自动拥有一个扩展名一次)。之后您将回显数组的内容。