【问题标题】:Mysql join tables for menu and submenu用于菜单和子菜单的 Mysql 连接表
【发布时间】:2015-09-14 16:53:52
【问题描述】:

我一直在从事这个新项目,我需要有关这种情况的帮助。 我有两个表的 sql 数据库:菜单和子菜单。

表的结构是:

菜单:id |标题 |顺序

子菜单:id |标题 |父母身份

当我想生成下面的菜单项和子菜单项时,我使用两个简单的查询,有没有更简单的方法来加入表格。基本上我想要这个:

  1. 菜单项

    + Submenu Item 1
    + Submenu Item 2
    + Submenu Item 3
    
  2. 菜单项

    + Submenu Item 1
    + Submenu Item 2
    + Submenu Item 3
    

【问题讨论】:

  • 您可能真的很想阅读我出于这个原因发布的this question and answer。它将向您展示如何链接表格以从中获取所需的信息。
  • 你不需要两张桌子,一张桌子就够了,看stackoverflow.com/questions/7569399/get-a-recursive-parent-listm 这就是你要找的
  • 由于其他原因我需要 2 张桌子,如果可以,您能帮忙吗? @Fluffeh 我当然会尝试,但不知何故我设法在所有菜单中只显示一个相同的子菜单:/

标签: php jquery mysql css mysqli


【解决方案1】:

假设数据库是这样的

CREATE TABLE menu
    (`id` int, `title` varchar(15), `order` int)
;

INSERT INTO menu
    (`id` , `title` , `order` )
VALUES
    (1, 'itstuff', 100),
    (2, 'book', 200),
    (3, 'toy', 300),
    (4, 'car', 400),
    (5, 'clothes', 500),
    (6, 'stuff', 600),
    (7, 'otherstuff', 700),
    (8, 'otherotherstuff', 900)
;


CREATE TABLE submenu
    (`id` int, `title` varchar(10), `order` int, `parentid` int)
;

INSERT INTO submenu
  (`id` , `title` , `order` , `parentid` )

VALUES
   (1, 'laptop', 100, 1),
    (2, 'mouse', 200, 1),
    (3, 'printer', 300, 1),
    (4, 'lcd screen', 400, 1),
    (5, 'volvo', 500, 4),
    (6, 'toyota', 600, 4),
    (7, 'bmw', 700, 4),
    (8, 'ford', 900, 4)
;

查询

SELECT
submenu.title
FROM
submenu
INNER JOIN menu ON submenu.parentid = menu.id
WHERE
menu.title = "itstuff"

此查询将返回属于菜单“itstuff”的所有子菜单


结果

[title]
laptop
mouse
printer
lcd screen

DEMO

用于创建菜单的 PHP 代码

<?php

// Create connection
$db = new mysqli('localhost', 'username', 'password', 'database_name');

if($db->connect_errno > 0){
    die('Unable to connect to database [' . $db->connect_error . ']');
};


// Perform queries
$sql1 = 'select * from menu';
$result1 = $db->query($sql1);

echo "<ul>";
foreach ($result1 as $menu)
{
     echo "<li>".$menu["title"];
     echo "<ul>";
     $menu_title = $menu["title"];

    $sql2 = 'SELECT
    submenu.title
    FROM
    submenu
    INNER JOIN menu ON submenu.parentid = menu.id
    WHERE
    menu.title = "'.$menu_title.'"';    

    $result2 = $db->query($sql2);
    foreach ($result2 as $submenu)
    {
        echo "<li>".$submenu["title"]."</li>";
    }
     echo "</ul>";
     echo "</li>";
}
echo "</ul>";


$db->close();

?> 

结果应该是这样的

&lt;ul&gt;&lt;li&gt;itstuff&lt;ul&gt;&lt;li&gt;laptop&lt;/li&gt;&lt;li&gt;mouse&lt;/li&gt;&lt;li&gt;printer&lt;/li&gt;&lt;li&gt;lcd screen&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;book&lt;ul&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;toy&lt;ul&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;car&lt;ul&gt;&lt;li&gt;volvo&lt;/li&gt;&lt;li&gt;toyota&lt;/li&gt;&lt;li&gt;bmw&lt;/li&gt;&lt;li&gt;ford&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;clothes&lt;ul&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;stuff&lt;ul&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;otherstuff&lt;ul&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;otherotherstuff&lt;ul&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; 

希望有帮助

【讨论】:

  • 好的,但是我想显示所有菜单项,如果菜单项有子菜单项,如果你知道我的意思,我想在下面显示
  • 这很简单,您可以创建一个 foreach 循环并使用
  • 为每个菜单回显子菜单,也许以后有时间再详细解释一下,
【解决方案2】:

这不是 jQuery! 标签错误。

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签