-1

通常使用 ID 和 parent 来存储类别树。在我的例子中,一个知识库,在article表中每条记录(文章)都属于一个类别(带有一个字段catid),在categories表中每条记录都有一个IDparent保存树结构。

article table
id | catid | date | subject | content

categories table
id | name | parent

问题是在将文章导出到 csv 或 excel 时,

id | category | date | subject | content

如何保持整个类别树,就像文章属于子类别时一样,我想要类别

grandpa/father/son/, or grandpa : father : son

然后可以在excel中打开csv,菜单->数据->文本到列,用“:”分隔,你会得到一个完整的树类别,而不仅仅是当前类别。

工作代码示例:

    $query = 'SELECT `a`.`id` AS `ID`, concat(CASE WHEN ISNULL(`f`.`name`) THEN "" ELSE concat(`f`.`name`,":") END,CASE WHEN ISNULL(`e`.`name`) THEN "" ELSE concat(`e`.`name`,":") END,CASE WHEN ISNULL(`d`.`name`) THEN "" ELSE concat(`d`.`name`,":") END,CASE WHEN ISNULL(`c`.`name`) THEN "" ELSE concat(`c`.`name`,":") END,CASE WHEN ISNULL(`b`.`name`) THEN "" ELSE `b`.`name` END) AS `Category`, `a`.`subject` AS `Subject`,`a`.`content` AS `Content`,`a`.`dt` AS `Date Created`, 

FROM articles as a
LEFT JOIN categories as b ON a.catid = b.id
LEFT JOIN categories as c ON b.parent = c.id
LEFT JOIN categories as d ON c.parent = d.id
LEFT JOIN categories as e ON d.parent = e.id
LEFT JOIN categories as f ON e.parent = f.id

WHERE (DATE(`dt`) BETWEEN \'' . $date_from . '\' AND \'' . $date_to . '\')  order by id asc';

希望它对其他想要导出树结构字段的人有所帮助。

4

3 回答 3

0

您必须在查询数据库后解析结果:

$query = 'query code here';

$result = mysql_query($query); 

while( $row = mysql_fetch_array($result) ) {
  // do something with that row
}

此外,不推荐使用 mysql_x 函数。请改用PDOmysqli

于 2013-01-09T09:32:13.977 回答
0
<?php

$conn = mysql_connect("localhost","YOUR DB USER NAME","YOUR DB PASSWORD");
if(!$conn) {
  die('Could not connect: ' . mysql_error());
}

mysql_select_db("YOUR DB NAME", $conn);

$result = mysql_query("YOUR QUERY HERE");

while($row = mysql_fetch_array($result)) {
  echo $row['ID'];
  -----
  -----
}

mysql_close($conn);
于 2013-01-09T09:45:31.963 回答
-1

我假设,您想在 PHP 中执行您在 phpMyAdmin 中设计的 SQL 代码 - 效果很好。最常见的问题是引号。在此处了解字符串引号

正如我所见,您使用'框架查询代码,但您也在查询中使用它。那一定产生了一系列可怕的语法错误。您可以"在将查询代码设置为变量时使用它来构建查询代码。

如果你什么也没得到,那么 SQL 命令可能已经执行,但结果是空的。您可以使用该var_dump()功能进行测试。还要检查您是否打开了所有错误报告。在此处了解错误报告

另外,我建议您检查和使用PDO 类而不是mysql函数,这会抛出漂亮的异常,您可以捕获并优雅地处理错误。PDO 它还将以某种方式保护您的代码。

于 2013-01-11T09:33:22.347 回答