我有一个名为“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中,我不想知道有多少。
但我该如何安排呢?
答案 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_INDEX
和GROUP 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时获得进一步的帮助。
答案 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 />";
}
通过这种方式,您可以将每个扩展名添加到数组中(一个键只能存在一次,因此您只能自动拥有一个扩展名一次)。之后您将回显数组的内容。