我正在制作一个产品系统,产品可以包含在一个系列中。
在产品中'第一页显示所有产品,但如果某个产品是INSIDE集合,我只需要显示集合名称而不是产品本身。我的意思是,隐藏集合中的产品并显示集合一次,同时还显示其他产品(没有集合)。
表1:colecciones("集合"西班牙语) - 我存储集合的ID和名称的地方。
CREATE TABLE `colecciones` (
`id` INT(255) NOT NULL AUTO_INCREMENT ,
`nombre` VARCHAR(100) NOT NULL ,
PRIMARY KEY (`id`)
);
INSERT INTO `colecciones`
(`nombre`)
VALUES
('dulce'),('salado'),('agrio')
;
http://sqlfiddle.com/#!9/8534e/1/0
表2:产品("产品") - 我存储产品的位置,如果是在集合中,则存储集合ID(列" coleccion")。如果不是,则值为0.
CREATE TABLE `productos` (
`id` INT(255) NOT NULL AUTO_INCREMENT ,
`nombre` VARCHAR(100) NOT NULL ,
`coleccion` INT(255) NOT NULL ,
PRIMARY KEY (`id`)
);
INSERT INTO `productos`
(`nombre`, `coleccion`)
VALUES
('manzana',1),('salmon',2),('sandia',0),('sopa',3),('pera',1),('agua',0)
;
http://sqlfiddle.com/#!9/6aef2/1/0
看一下这个例子,名为" manzana" (苹果)是收藏品的一部分" dulce" (甜蜜的)和产品" agua" (水)不是任何收藏品的一部分。
我希望展示的是:
<h1>My products</h1>
dulce /* (ID 1 table `colecciones`) because I have products with "coleccion = 1" */
salado /* (ID 2 table `colecciones`) because I have products with "coleccion = 2" */
sandia /* the product itself, not collection */
agrio /* (ID 3 table `colecciones`) because I have products with "coleccion = 3" */
agua /* the product itself, not collection */
我坚持这个。如何用PHP以这种方式显示数据?
我需要像productos.id DESC
那样订购,我最后通过添加来完成:
ORDER BY c.`id` DESC
答案 0 :(得分:1)
如果订单无关紧要,只需使用两个查询:
number of objects in each section -1
这将为您提供不在集合中的所有产品。不过,我建议使用SELECT * FROM productos WHERE coleccion = 0;
代替NULL
。
第二次查询:
0
这将为您提供所有具有产品的集合。
答案 1 :(得分:1)
我认为聚合会做你想做的事情:
select (case when c.name is not null then c.name else p.name end) as name
from productos p left join
colecciones c
on p.coleccion = c.id
group by name, (c.name is not null);
group by
中的第二个条件只是确保当产品和coleccion具有相同名称时,您会获得两行。
我也认为这可以用于您的目的:
select p.name from productos where coleccion = 0
union all
select c.name from colecciones;
您似乎希望所有不在集合中的产品加上集合名称(这是查询的作用)。
编辑:
我不确定你想要哪个ID,但你可以这样做:
select p.name, p.id from productos where coleccion = 0
union all
select c.name, c.id from colecciones
order by id desc;