繁体   English   中英

MySQL 查询从一个表中获取一个项目从另一个表中获取多个项目

[英]MySQL query to get one item from a table an multiple items from another table

我有一个名为tbl_product的 MYSQL 表

在此处输入图像描述

另一个名为tb_opciones_productos 的

在此处输入图像描述

第三个表称为tb_opciones

在此处输入图像描述

我需要显示tbl_product中的每个项目,如下所示:

在此处输入图像描述

如何从 tbl_product 获取一项并从 tb_opciones_producto 获取所需的行以获得所需的结果?

编辑:

这是我当前的查询建议:

SELECT tbl_product.*, 
GROUP_CONCAT( (SELECT CONCAT(tb_opciones.nombre, "(+$", tb_opciones.precio, ")") 
FROM tb_opciones WHERE tb_opciones.id_opcion = tb_opciones_productos.id_opcion) SEPARATOR "<br>" ) as options FROM tbl_product 
INNER JOIN tb_opciones_productos ON tbl_product.id = tb_opciones_productos.producto

我创建了一个小 sqlfiddle 来测试: http://sqlfiddle.com/#!9/fc3316/16
你可以GROUP_CONCAT一个子查询。 它可能没有经过优化,但可以完成工作。

PS:下一次,能提供一个样本结构吗?

结构:

    CREATE TABLE IF NOT EXISTS `products` (
      `id` int(6) unsigned NOT NULL,
      `name` varchar(255) NOT NULL,
      PRIMARY KEY (`id`)
    ) DEFAULT CHARSET=utf8;
    
    INSERT INTO `products` (`id`, `name`) VALUES
      (1, 'Product Lorem'),
      (2, 'Product Ipsum');
    
    CREATE TABLE IF NOT EXISTS `products_options` (
      `id_product` int(6) unsigned NOT NULL,
      `id_option` int(6) unsigned NOT NULL,
      PRIMARY KEY (`id_product`, `id_option`)
    ) DEFAULT CHARSET=utf8;
    
    INSERT INTO `products_options` (`id_product`, `id_option`) VALUES
      (1, 1),
      (1, 2),
      (1, 3),
      (2, 3);
      
    
    CREATE TABLE IF NOT EXISTS `options` (
      `id` int(6) unsigned NOT NULL,
      `name` varchar(255) NOT NULL,
      `value` double NOT NULL,
      PRIMARY KEY (`id`)
    ) DEFAULT CHARSET=utf8;
    
    INSERT INTO `options` (`id`, `name`, `value`) VALUES
      (1, 'Option A', 42),
      (2, 'Option B', 6),
      (3, 'Option C', 12);

要求:

    SELECT products.*,
      GROUP_CONCAT(options.name, " (+$", options.value, ")" SEPARATOR "<br>")
    FROM products
      INNER JOIN products_options
        ON products.id = products_options.id_product
      INNER JOIN options
        ON products_options.id_option = options.id
    GROUP BY products.id

使用您的结构,我认为这个会起作用:

SELECT tbl_product.*,
  GROUP_CONCAT(tb_opciones.nombre, " (+$", tb_opciones.precio, ")" SEPARATOR "<br>")
FROM tbl_product
  INNER JOIN tb_opciones_productos
    ON tbl_product.id = tb_opciones_productos.producto
  INNER JOIN tb_opciones
    ON tb_opciones_productos.opcion = tb_opciones.id
GROUP BY tbl_product.id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM