十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这个就要看你的数据库表的设计和你程序处理了
我们提供的服务有:网站建设、成都网站设计、微信公众号开发、网站优化、网站认证、黄骅ssl等。为成百上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的黄骅网站制作公司
比如你有一个表是放文章分类的
每个文章分类又可以有很多文章
那么你可以设计两表 ,一个是文章分类表,一个是文章表
在文章表里有个外键是关联文章分类的
实现就是
先查出所有文章分类的数据,放入一个数组
然后再循环这个数组去查每一个文章分类对应的所有文章
那么你这样的数组结构就出来了
我写一段伪代码吧。。。
$article_cate = 获取的文章分类数组;
foreach($article_cate as $key =$val){
$cate_id = $val['cate_id'];//文章分类ID,这个你可以自己随便指定
$articles = 获取的文章数组;
$val['articles'] = $articles ;存入文章列表
$article_cate[$key]=$val;
}
这样这个$article_cate数组就是你想要的结构了
array(
0=array(
'文章分类名称字段' =文章分类名,
'articles'=array(
0=array(
'文章标题字段' =文章标题,
文章内容字段' =文章内容
),
1=array(
'文章标题字段' =文章标题,
文章内容字段' =文章内容
)
)
),
1=array(
'文章分类名称字段' =文章分类名,
'articles'=array(
0=array(
'文章标题字段' =文章标题,
文章内容字段' =文章内容
),
1=array(
'文章标题字段' =文章标题,
文章内容字段' =文章内容
)
)
)
)
大概就是这样吧,手写的,不知道有没有写错
像这样的结构,一般都是几个循环嵌套一下
当然如果超过两个循环的话,最好写一个方法,在方法里处理其他的循环
你自己去尝试一下吧
如果类的个数固定,并且不是很多,那么可以使用下面的方式:
$list1='';//分类一的文章列表
$list2='';//分类二的文章列表
$list3='';//分类三的文章列表
$sql='select cls, title from blog';//获取文章标题的SQL,你可以同时提取其它的作者、时间等字段
$res=mysql_query($sql);//可能你是使用的其它数据库,反正原理基本上相同
while ($row=mysql_fetch_array($res)){
//把数据库提取的文章标题添加到各自类别的字符串后面
if ($row[cls]==1) $list1.="$row[title]br";
elseif ($row[cls]==2) $list2.="$row[title]br";
elseif ($row[cls]==3) $list3.="$row[title]br";
}
mysql_free_result($res);
//下面输出内容
echo EMD
tabletr
td分类一BR$list1
td分类二BR$list2
td分类三BR$list3
/table
END;
PHP读取MySQL数据有如下方法:
方法一:
?
$rs = mysql_query($q, $dbh);
while($row = mysql_fetch_array($rs)) echo "$row[id] $row[name] br /";
/* id和name可以换位置 */
@mysql_close($dbh);
/* 关闭到mysql数据库的连接 */
?
方法二:
?
$rs = mysql_query($q, $dbh);
while($row = mysql_fetch_object($rs)) echo "$row-id $row-name br /";
/* id和name可以换位置 */
?
方法三:
?
$rs = mysql_query($q, $dbh);
/* 定义变量 rs ,函数mysql_query()的意思是:送出 query 字串供 MySQL 做相关的处理或者执行.由于php是从右往左执行的
,所以,rs的值是服务器运行mysql_query()函数后返回的值 */
if(!$rs){die("Valid result!");}
echo "table";
echo "trtdID/tdtdName/td/tr";
while($row = mysql_fetch_row($rs)) echo "trtd$row[0]/tdtd$row[1]/td/tr";
/* 定义量变(数组)row,并利用while循环,把数据一一写出来.
函数mysql_fetch_row()的意思是:将查询结果$rs单列拆到阵列变数中.
$row[0] 和 $row[1] 的位置可以换*/
echo "/table";
?
总结:方法一是效率最高的,推荐日常使用。
数据库中给多个父级ID字段,例如:国内新闻的PID(父级ID)是新闻的ID,体育新闻的PID是国内新闻的ID,这样通过查找PID就可以找到上一级别。
打开数据库那就不写了。
前几天刚写了一个。你看下
/* 表结构
CREATE TABLE `lh_categroy` (
`id` int(10) NOT NULL auto_increment,
`parentid` int(6) NOT NULL,
`name` varchar(255) NOT NULL,
`keyword` varchar(255) NOT NULL COMMENT '关键字',
`des` varchar(255) NOT NULL COMMENT '描述',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=44 DEFAULT CHARSET=utf8;
*/
/**
* 获得所有栏目排序后的列表
* @return array
*/
function getAllOrderColumns($id = 0) {
global $columns;
$result = array();
if ($id) $result[$id] = $columns[$id];
foreach ($columns as $column) {
if ($column['parentid'] == $id) {
$column['level'] = 0;
$result[$column['id']] = $column;
getColumns($columns, $column['id'], $result, 1);
}
}
return $result;
}
function getColumns($columns, $cid, $result, $l = 1) {
foreach ($columns as $c) {
if ($c['parentid'] == $cid) {
$c['level'] = $l;
$result[$c['id']] = $c;
getColumns($columns, $c['id'], $result, $l + 1);
}
}
}
$sql = 'select * from lh_categroy';
$query = mysql_query($sql);
while($row = mysql_fetch_assoc($query)){
$columns[]=$row;
}
$fenlei = '';
$fenlei = 'select name="cid" style="width:200px; height:25px;"
option value="0"请选择分类/option';
foreach(getAllOrderColumns() as $v){
$v[name] = $v[level] ? ($v[level]==1 ? 'nbsp;nbsp;|-'.$v[name]:'nbsp;nbsp;nbsp;|-'.$v[name]) : $v[name];
$fenlei .= "option value='$v[id]'$v[name]/option";
}
$fenlei .= '/select';
echo $fenlei;