这是我第一次使用PHP或SQL。
我正在创建一个简单的网站,其中包含应用程序以及他们的名称,作者,版本,描述等.PHP脚本从我已经创建的MySQL数据库中获取此信息。每个应用都有一个分配给它的唯一标识符。多个版本将重复使用相同的标识符。
我已经让它显示只有一个版本的条目。
...然而
当发布应用程序的更新版本时,我希望它在最新版本旁边的下拉列表中列出旧版本(只是链接到旧版本链接的版本号)。我假设我已经找到了一种方法来显示它,因此当我向数据库添加应用程序的更新版本时,我留下了没有变化的东西(如名字,作者,描述),给它与旧版本相同的标识符,只添加了较新的版本号和较新版本的文件名。有关示例,请参阅here。
然而,我认为错了。
我不知道如何继续。我有一个问题:
SELECT * FROM apps WHERE identifier IN ( SELECT identifier FROM apps GROUP BY identifier HAVING count(*) > 1)
但是,这仅选择具有重复"标识符" s的所有条目。我不知道如何通过一个循环来运行它,以回应旧条目的描述/名称,但是新条目的版本号/链接(同时还能够回显旧版本号) / link for my dropdown)。哦,也是如此,它不会为具有重复标识符但与其他应用程序不相同的应用程序分配名称/描述/等。身份标识。对不起,这很难解释。
我当前的循环,是:
$result=mysqli_query($connection,$query);
$num=mysqli_num_rows($result);
$i=0;while ($i < $num) {while ($row = mysqli_fetch_array($result)) {
// do stuff (echo)
} ;$i++;};
单独回复条目,一个是旧版本,一个是新版本(没有显示描述,名称或作者)。
我该怎么办?
答案 0 :(得分:1)
这样的事情怎么样:
您可以从表中选择所有数据,按标识符排序,然后按版本排序。查询类似于:
-- ↓ orders data by identifier, thereby 'grouping' together records with the same identifier
SELECT * FROM apps ORDER BY identifier, version DESC
-- ↑ orders each 'group' by version number descending - highest / 'newest' first
然后,从这些数据中,您可以在PHP中创建一个数组结构,使您可以轻松地循环数据。如下所示:
$result = mysqli_query($connection,$query);
$apps = array(); // Create apps array
while ($row = mysqli_fetch_array($result)) {
// Assign the Name, Description, Author of the row
// These will be blank until the last (oldest version) which has these values
// $app[$row[1]] will create a key for each identifier or use the existing one
$apps[$row[1]]["name"] = $row[2];
$apps[$row[1]]["description"] = $row[3];
$apps[$row[1]]["author"] = $row[4];
// If there is no current version stored
if(empty($apps[$row[1]]["current_version"])){
$apps[$row[1]]["current_version"]["version"] = $row[5];
$apps[$row[1]]["current_version"]["source"] = $row[6];
$apps[$row[1]]["current_version"]["filename"] = $row[7];
} else { // If not, this means this row is an older version
$v = array(
"version" => $row[5],
"source" => $row[6],
"filename" => $row[7],
);
$apps[$row[1]]["older_versions"][] = $v; // Add the array to the older_versions array
}
}
然后生成以下数组结构:
Array
(
[vitashell] => Array
(
[name] => VitaShell
[description] => VitaShell is an alternative replacement...
[author] => TheFloW
[current_version] => Array
(
[version] => 0.86
[source] => http://www.example.com/link/version/0_86
[filename] => vitashell_0_86.vpk
)
[older_versions] => Array
(
[0] => Array
(
[version] => 0.8
[source] => http://www.example.com/link/version/0_8
[filename] => vitashell_0_8.vpk
)
)
)
[identifier] => Array (...)
)
然后,您可以使用几个foreach
循环遍历$apps
阵列,根据需要打印出数据。
我做了一个打印出数据的简单例子。出于显示目的,我在数据集中添加了一些虚拟行:
<?php foreach($apps as $app){ ?>
<div class="app">
Name: <?php echo $app["name"]; ?><br />
Description: <?php echo $app["description"]; ?> <br />
Author: <?php echo $app["author"]; ?> <br />
Version: <a href="<?php echo $app["current_version"]["source"]; ?>"><?php echo $app["current_version"]["version"]; ?></a> <br />
<?php if(!empty($app["older_versions"])){ ?>
Older Versions:
<select name="older_versions">
<?php foreach($app["older_versions"] as $version){ ?>
<option value="<?php echo $version["source"] ?>"><?php echo $version["version"]; ?></option>
<?php } ?>
</select>
<?php } ?>
</div>
<hr>
<?php } ?>
创造了:
注意:&#34; TIMSTUFF&#34;只有1个版本,因此旧版本
没有下拉列表