【发布时间】:2011-02-28 20:09:17
【问题描述】:
好的,我试着推迟并寻找答案,但我需要你们的帮助!我有三个表——类别、项目和图像。我进行了设置,以便将图像链接到特定项目,并且每个项目都有一个类别。我使用两个内部连接来做到这一点(这是正确的吗?)我最终想要做的是让 PHP 从每个项目中回显第一个图像,然后我将使用 ajax 来加载其余的图像项目。我看过 LIMIT ,我确信有一种方法可以使用 PHP 和 for 循环轻松完成,但我只是难住了!我怎样才能回显每个项目的第一个“文件名”?提前致谢!
表格:
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
CREATE TABLE `project` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`caption` text NOT NULL,
`category` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
CREATE TABLE `images` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`filename` varchar(255) NOT NULL,
`project` int(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;
查询:
SELECT i.filename as filename,
i.project as project_id,
p.name as project_name,
c.name as category
FROM images i
INNER JOIN project p
ON i.project = p.id
INNER JOIN category c
ON p.category = c.id
【问题讨论】:
-
GROUP BY项目ID的结果。欢迎来到 SO。 -
当你说“每个项目的第一个”时,你是什么意思?按名称排序?按身份证?
-
观察:
project.id定义为int(11)而images.project定义为int(50)。 -
@Linus Kleen 谢谢,我很惊讶帮助来得如此之快!如果我
GROUP BY,那不是只返回他们组中的图像吗? (每个“项目”中的“文件名”)我如何只获得每个组中存储的第一个文件名?谢谢! -
@ypercube 我猜是按 id 排序的,但我想我在想,无论哪个文件名在每个项目的第一行。我猜这意味着我应该有不同的计划?感谢您指出 int(50)- 没有意义!