【问题标题】:SQL bind two tables into one SQL statement in a specific waySQL 以特定方式将两张表绑定成一条 SQL 语句
【发布时间】:2021-04-04 02:19:23
【问题描述】:

我有两个带有列的 SQL 表:

菜单:

  • id [AI]
  • 姓名
  • 说明

子类别:

  • id [AI]
  • 姓名
  • pid(子类别父 ID)
  • 中(菜单 ID)

在我的网站的新版本中,不再有菜单,“子类别”现在更改为“类别”:

  • 身份证
  • 姓名
  • 说明
  • parent_id

旧数据库仍在使用中,所以我正在制作我的迁移脚本,这里是包含类别的部分:

$new_db->query("TRUNCATE TABLE `categories`");
$ids = [];
$menu_list = $old_db->fetch("SELECT * FROM `menu` ORDER BY `id`");
foreach($menu_list as $menu)
{
    $id = $new_db->insert("categories", [
        "name" => $menu["name"],
        "description" => $menu["description"],
        "parent_id" => "0"
    ]);
    $ids[$menu["id"]] = $id;
    
}
$subcategories = $old_db->fetch("SELECT * FROM `subcategories` ORDER BY `id`");
foreach($subcategories as $subcategory)
{
    $pid = 0;
    $desc = "";
    if($subcategory["mid"] > 0)
    {
        $menu = $old_db->fetch_first("SELECT `id`, `description` FROM `menu` WHERE `id` = '".$subcategory["mid"]."' LIMIT 1");
        $pid = $ids[$menu["id"]];
        $desc = $menu["description"];
    }
    else
    {
        $pid = $subcategory["pid"];
    }
    $new_db->insert("categories", [
        "name" => $subcategory["name"],
        "description" => $desc,
        "parent_id" => $pid
    ]);
}

它有效,但我很确定它可以以更低的成本做得更好。 我可以编写一条 SQL 语句,将菜单和子类别绑定到一个结果列表中,然后将它们全部插入吗?

【问题讨论】:

标签: php mysql sql mysqli


【解决方案1】:

我想你只是想要一个JOIN

SELECT * 
FROM `categories` c 
JOIN `subcategiries` s
ON s.pid = c.id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 2017-01-29
    • 2014-10-30
    相关资源
    最近更新 更多