2012-07-29 57 views
0

我无法如何使用表格数据,例如我需要...我的表格由一个分类名称列(对多个子分类具有相同的值)和另一列包含子类别名称。在查询分区后打印出部分唯一的数据

例如:

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

我想写的是从数据库中选择的所有数据,并打印出的类别名称仅一次select语句,同时打印出所有的子类是,特定的类别名称包括。

喜欢的东西:

水果:

  • 苹果
  • 橙子

汽车:

  • 本田
  • 沃尔沃
  • 奥迪
+0

@Truth你可能想避免重新格式化,当它改变问题的意思。它现在意味着MHZ希望将所有内容放在一列中(可能或不可能)。 – Vatev 2012-07-29 15:59:56

+0

@Vatev:如果你看过问题的原始代码([让我帮你!](http://stackoverflow.com/revisions/58cf3e90-4f5e-4788-ab5b-0eb33f81bb7f/view-source))你会知道为什么我按照我的方式编辑它:) – 2012-07-29 16:10:12

+0

@Truth对不起,我只查看格式化版本。 – Vatev 2012-07-29 16:13:12

回答

0

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

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

现在你有一个数组,其中每个键的值都是键和项。

祝你好运!

+0

你能解释为什么不推荐?此外,我不使用数组...谢谢你的回应,虽然 – AnchovyLegend 2012-07-29 15:10:56

+0

嗯,我有点误解你的问题。 Vatev的答案完全符合你的要求。如果你使用了我所做的,你可以这样做:'$ cars = implode(',',$ array ['cars']);'并且为汽车使用逗号分隔的字符串。这样,MySQL正在减少工作量,为您提供更多的灵活性。 – David 2012-07-29 15:12:14

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)); 
} 
+0

感谢您的回复。没有解释该类别与子类别名称是如何分离的,这对我没有多大帮助。另外,select语句中为什么需要group_concat?它只是添加一个逗号? – AnchovyLegend 2012-07-29 15:13:31

+0

GROUP_CONCAT是一个[聚合函数](http:// infogoal。com/sql/sql-aggregate.htm)(如SUM,COUNT,AVG ...),而是对值进行数学运算,并将它们与指定的“SEPARATOR”连接在一起。 – Vatev 2012-07-29 15:23:16

+0

你应该真的试着通过直接在MySQL客户端运行查询来检查结果是否正确。同样这个答案会给你2列 - 1-st将是类别(col2)2-nd将是由','分隔的类别中的东西(col1)。我不能确定那是你需要的答案。 – Vatev 2012-07-29 18:25:29