gpt4 book ai didi

php - 对 Mysql PHP 查询结果进行分组

转载 作者:行者123 更新时间:2023-11-29 23:07:43 25 4
gpt4 key购买 nike

我有一个基本的 PHP 页面,用于搜索复古 ZX Spectrum 杂志文章的 MySQL 数据库。

地址是[www.retroresource.co.uk][1]

PHP 结果页面很好,因为它生成了结果,但我希望能够按“fgames.fgname”对结果进行分组

例如,如果我搜索 Dizzy

头晕(作为标题)

包含 fgames.fgname = Dizzy 行的表格

Spindizzy(作为标题)

包含 fgames.fgname = Spindizzy 行的表

金银岛眩晕(作为标题)

表格中的行包含 fgames.fgname = Treasure Island Dizzy

等等等等

我用谷歌搜索并查看了一些教科书,但找不到解决方案。非常感谢任何帮助。

彼得

协助后修改代码(但没有结果)

<?php 

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


require( '../connect_db.php' ) ;

$query = $_GET['query'];


$min_length = 4;
// you can set minimum length of the query if you want

$query = strip_tags($query);

$query = mysqli_real_escape_string ($dbc,$query);


$q = "SELECT fgames.fgname, fgames.fgprorg, fgames.fgprbud, fgames.fgratng, fgames.fgprdsk, ftypes.fttname, frefs.fryymm, frefs.frpage, frefs.frissue, fmagzne.fmname, frefcde.ffname
FROM fgames, ftypes,frefs, fmagzne,frefcde
WHERE ftypes.fttype = fgames.fgtype
and fgames.fglink = frefs.frlink2
and frefs.frentry = frefcde.ffentry
and frefs.frmag = fmagzne.fmmag
and fgames.fgname LIKE '%".$query."%'
order by fgames.fgname ASC" ;

$r = mysqli_query( $dbc , $q ) ;


$current_group = '';
while ( $row = mysqli_fetch_array( $r , MYSQLI_ASSOC ) )

{
if($row['fgames.fgname']) !== $current_group)

{

if($current_group !== '')
{
echo '</table>';
}
$current_group = $row['fgames.fgname'];

echo '<table><tr><th>FGNAME</th><th>FGPRORG</th><th>FGRBUD</th><th>FGRATNG</th><th>FGRDSK</th>
<th>FTTTNAME</th><th>FRYYMM</th><th>FRPAGE</th><th>FRISSUE</th><th>FMNAME</th><th>FFNAME</th></tr>';

}
echo '<tr><td>'.$row['fgname'].'</td><td>'.$row['fgprorg'].'</td><td> '.$row['fgprbud'].' </td><td>'.$row['fgratng'].' </td> <td>'.$row['fgprdsk'].' </td><td>'.$row['fttname'].'</td><td> '.$row['fryymm'].'</td><td> '.$row['frpage'].'</td><td> '.$row['frissue'].' </td> <td>'.$row['fmname'].' </td><td>'.$row['ffname'].'</td></tr>';

}

echo '</table>';

else
{
echo '<p>' . mysqli_error( $dbc ) . '</p>' ;
}








# Close the connection.
mysqli_close( $dbc ) ;
?>

最佳答案

有两种基本方法。

将查询数据加载到二维数组中并使用嵌套循环输出,如下所示:

$array_for_output = array();
while($row = /* your query fetch mechanism here */) {
$array_for_output[$row['field_you_are_grouping_on']] = $row;
}

foreach($array_for_output as $table_name => $table_data) {
// output table header here
foreach($table_data as $table_row) {
// output individual row
}
// output table closure here
}

或者另一种方法是在您尝试分组的字段上使用 ORDER BY 子句进行查询,并在单个循环中检测当前组中的更改

$query = "
SELECT ...
FROM ...
WHERE ...
ORDER BY field_you_are_grouping_on, any_secondary_ordering_field_here ASC";

// execute query here

$current_group = '';
while ($row = /* your query fetch mechanism here */) {
if($row['field_you_are_grouping_on']) !== $current_group) {
// we have started a new group
if($current_group !== '') {
// this is not first table
// so output closure to previous table here
}
$current_group = $row['field_you_are_grouping_on'];
// output new table header here
}
// output row data here
}
// output closure to final table here

从内存管理的角度来看,第二种方法通常更可取(您不必在任何时候将整个结果集存储在内存中),但一些新手开发人员可能不会发现这不如第一种方法直观。如果您想要获取完整的结果集并将其注入(inject)到用于呈现显示的某种模板中,第一种方法也可能更合适。

关于php - 对 Mysql PHP 查询结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28222654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com