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

2ledvvac  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(276)

我有一个名为tbl\u product的mysql表

另一个表叫做tb\u opciones\u productos

第三张table叫tbèopciones

我需要展示tbl\U产品的每一项,如下所示:

如何从tbl\u product获取一个项目,并从tb\u opciones\u 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
flvlnr44

flvlnr441#

我创建了一个小sqlfiddle来测试:http://sqlfiddle.com/#!2016年9月16日
你可以 GROUP_CONCAT 子查询。它可能不会被优化,但它可以完成工作。
下一次,你能提供一个样本结构吗?
结构:

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

相关问题