好吧,我试着忍住并寻找答案,但我需要你们的帮助!我有三个表 - 类别,项目和图像.我已将其设置为将图像链接到特定项目,并且每个项目都有一个类别.我使用两个内部联接来做到这一点(这是正确的吗?)我最终要做的是让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;
Run Code Online (Sandbox Code Playgroud)
查询:
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
Run Code Online (Sandbox Code Playgroud)
通常,您可以按特定列对查询结果进行分组。
这个不带 a 的查询GROUP BY更适合查找项目中的第一张图像:
SELECT @pid := `prj_id`,
(SELECT MIN(`id`) FROM `images` `i` WHERE `i`.`prj_id` = @pid) `first_img`
FROM `projects`
Run Code Online (Sandbox Code Playgroud)
这还将选择根本没有图像的项目(即first_img)NULL。HAVING可能需要一个过滤这些的子句。
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |