0

我无法弄清楚如何使用我需要的表数据...我的表包含一个类别名称列(对于许多子类别具有相同的值),另一列包含子类别名称。

例如:

col1        col2
------------------
apples      fruits
oranges     fruits
pears       fruits
honda       cars
volvo       cars
audi        cars

我正在尝试编写一个 select 语句,该语句从数据库中选择所有数据并仅打印一次类别名称,同时打印出该特定类别名称包含的所有子类别。

就像是:

水果:

  • 苹果
  • 橘子

汽车:

  • 本田
  • 沃尔沃
  • 奥迪
4

2 回答 2

2
SELECT
    col2,
    GROUP_CONCAT(col1 SEPARATOR ',') as stuff
FROM table1
GROUP BY col2

如果您想在名称前使用“-”,则可以CONCAT('-',col1)使用col1.

此 php 代码会将结果转换为一维数组

$conn = new mysqli('host','user','pass','db_name');

if ($conn->connect_errno) {
    printf("Connect failed: %s\n", $conn->connect_error);
    exit();
}

if (!($rs = $conn->query("
        SELECT
            col2,
            GROUP_CONCAT(col1 SEPARATOR ',') as stuff
        FROM table1
        GROUP BY col2
    "))) {
    printf("Error: %s\n", $conn->error);
    exit();
}


$result = array();
while ($row = $rs->fetch_object()){
    $result[] = $row->col2;
    if(!empty($row->stuff)) $result = array_merge($result,explode(',',$row->stuff));
}
于 2012-07-29T15:08:31.103 回答
0

你是什​​么推荐的。而且,它会让你的阵列生活变得非常困难。考虑尝试这样的事情:

$query = mysql_query("SELECT * FROM table");
$array = array();
while($row = mysql_fetch_assoc($query)) {
   $cat = $row['col2'];
   $item = $row['col1'];
   $array[$cat] = $item;
}

现在您有一个数组,其中类别作为键,项目作为每个键的值。

祝你好运!

于 2012-07-29T15:08:07.750 回答