【发布时间】:2011-01-26 13:11:03
【问题描述】:
您好,我有两个关于 MySQL 和 QUERIES 的问题。
首先,我想知道如果我在 phpmyadmins 设计器中设置表之间的关系,或者我不设置,它在形成查询时会有什么不同?
其次,我有 3 个表并且在我的查询中有一些逻辑错误,似乎 MAX() 函数和 GROUP BY 不能很好地结合在一起://
所以如果有人知道如何解决我的问题,请分享:)
是的,我使用的是 MySQL 5.1.41,并建立了表之间的关系
CREATE TABLE `sandbox`.`videos` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 255 ) NOT NULL ,
`views` INT NOT NULL ,
`id_user` INT UNSIGNED NOT NULL ,
`id_type` INT UNSIGNED NOT NULL ,
INDEX ( `id_user` , `id_type` )
) ENGINE = INNODB;
id title views id_user id_type
------------------------------------
1 video1 50 1 1
2 video2 55 3 1
3 video3 100 2 3
4 video4 20 5 3
5 video5 62 4 5
CREATE TABLE `sandbox`.`users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 50 ) NOT NULL
) ENGINE = INNODB;
id name
-----------
1 adam
2 mike
3 chuck
4 walker
5 nancy
CREATE TABLE `sandbox`.`types` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 50 ) NOT NULL
) ENGINE = INNODB;
id name
-------------
1 20 min
2 30 min
3 50 min
4 90 min
5 120 min
我的查询:
SELECT videos.id, videos.title, MAX(videos.views) AS views, users.name AS user, types.name AS type
FROM videos, users, types
WHERE videos.id_user = users.id
AND videos.id_type = types.id
GROUP BY id_type
ORDER BY id_type ASC
LIMIT 0 , 20;
查询结果:
id title views user type
------------------------------------
1 video1 55 adam 20 min
3 video3 100 mike 50 min
5 video5 62 walker 120 min
GROUP BY 函数按类型对所有条目进行分组,并仅从组中的第一个条目中获取数据,但由于 MAX() 函数,它会从视图中复制最高值并将其写入组中的第一个条目。
想要的结果:
id title views user type
------------------------------------
1 video2 55 chuck 20 min
3 video3 100 mike 50 min
5 video5 62 walker 120 min
我需要的是它选择所有数据(标题和用户名),不仅查看数据并按类型分组。
感谢任何帮助:)
【问题讨论】:
-
希望对您有所帮助:stackoverflow.com/questions/979034/…
标签: mysql phpmyadmin relationship