MySql加入两个没有重复的表

时间:2014-04-22 17:27:14

标签: php mysql

我有一个类别表和一个s_category表。每个类别都可以有许多s_category 例如:


表1:类别
------------------------------ <br/> | id_category | name_category | | ---------------------------- | 1 | vehiculs | ------------------------------ <br/>
 表2:sous_category
----------------------------------------- <br/> | id_scategory | name_scategory | id_cat | | --------------------------------------- <br/> | 1 | cars | 1 | | ---------------------------------------- <br/> | 2 | motors | 1 | ------------------------------------------ <br/>

我用这个:

SELECT category.name_category,sous_category.name_scategory
 FROM category
 JOIN sous_category
 ON category.id_category=sous_category.id_cat ';

但是OUTPUT与类别标题重复:

array
  0 => 
array
  'name' => string 'vehiculs' (length=8)
  'name_s' => string 'cars' (length=4)
  1 => 
array
  'name' => string 'vehiculs' (length=8)
  'name_s' => string 'motors' (length=6)
  2 => 
array
  'name' => string 'vehiculs' (length=8)
  'name_s' => string 'pieces' (length=6)
  3 => 
array
  'name' => string 'electronics' (length=11)
  'name_s' => string 'tv' (length=2)
  4 => 
array
  'name' => string 'electronics' (length=11)
  'name_s' => string 'mobile' (length=6)

我只想看到:

  1. VEHICULES

    • 辆。
    • 电机。
    • 片。
  2. 电子

    • TV
    • 移动。

  3. 在顶部menuBar中使用它

2 个答案:

答案 0 :(得分:0)

这就是SQL的结果集。没有办法解决这个问题。如果您想在PHP中进行调整,请按以下方式进行:

假设你想要一个如下所示的数组:

array(
    "Vehicules" => array(
        "cars",
        "motors",
        "piece",
    ),

    "Electronics" => array(
        "TV",
        "mobile",
    ),
)

您可以遍历结果集并构建此数组:

$final = array();
foreach($results as $row)
    $final[$row["name"]][] = $row["name_s"];

答案 1 :(得分:0)

这里有一个基本的概念错误。 MySQL实现了关系代数

这是一个&#34;代数&#34;因为它具有类型,该类型的值以及采用该类型的值并生成该类型的其他值的运算符。因此,加法,减法和乘法在整数上创建代数,因为将整数相加,相减和相乘只会产生更多的整数。除法是的一部分,因为两个整数的比率不一定是整数。

这是一个&#34;关系代数&#34;它所使用的类型是&#34;关系&#34;。可以将关系视为一个表,其中列被命名,行被编号:

+---------+-------------+--------+
|         |    name     | name_s |
+---------+-------------+--------+
|       1 | vehicles    | cars   |
|       2 | vehicles    | motors |
|       3 | vehicles    | pieces |
|       4 | electronics | tv     |
|       5 | electronics | mobile |
+---------+-------------+--------+

重要的是要记住:无论你做什么,无论你扭曲和扭曲,SQL表达式的结果都只是另一种关系。

你的问题是,你想要一个不是关系的结构。它是树或层次结构或类似的东西,SQL不会这样玩。

如果你想要一棵树,你必须在后期处理中创建它(在你的情况下,用PHP代码,并且上帝可以怜悯你的灵魂)。

强迫你的两个技术要点:

  1. &#34;排序&#34;的作用关系尚不清楚,至少对我而言。似乎关系通常是无序的,但您可以强制或依赖某些操作的订购(ORDER BY和LIMIT)。
  2. 我知道某些SQL实现允许非关系结果,如&#34;总计&#34;。我处理这些功能的方式与处理 The Matrix 中的场景相同,Morpheus解释说人类是Matrix的动力源:坚决假装它不存在。