数据库设计查询

时间:2016-01-27 00:02:19

标签: mysql sql database join

背景

我们展示了一系列“项目”,每个项目都有一个类别,但有一个到多个不同的服务。

当从数据库中检索信息时,它将填充总共15个不同的项目div,这5个不同类别中的每一个都有3个项目div。

虽然每个项目div只有一个类别,但它们有1到多个不同的服务。

相关表格

Project
* projectID : smallint(5) unsigned
* businessID : smallint(5) unsigned
* categoryID : smallint(5) unsigned
* personID : smallint(5) unsigned
* reviewID : smallint(5) unsigned
* title : varchar(255)
* startDate : date
* endDate : date
* summary : varchar(255)
* img1 : varchar(255)
* img2 : varchar(255)
* img3 : varchar(255)


Service
* serviceID : smallint(5) unsigned
* serviceType : varchar(255)
* categoryID : smallint(5) unsigned


ProjectService
* projectID : smallint(5) unsigned
* serviceID : smallint(5) unsigned

问题

我需要一个查询来返回一个包含15个项目的表,每个类别有3个..这很好,我可以实现,但我还需要返回与每个项目一起的projectservice表中的服务.. < / p>

到目前为止我已经

(SELECT ps.*, pro.* 
FROM `project` AS pro
JOIN `projectservice` AS ps
ON ps.projectID=pro.projectID
WHERE pro.categoryID = 1  
ORDER BY pro.projectID DESC LIMIT 3)
UNION DISTINCT
(SELECT ps.*, pro.* 
FROM `project` AS pro 
JOIN `projectservice` AS ps
ON ps.projectID=pro.projectID  
WHERE pro.categoryID = 2  
ORDER BY pro.projectID DESC LIMIT 3)
..etc..

这正确地为每个类别返回3个项目......但是对于每个服务,它将多次返回相同的项目。

我需要的是;

  1. 为5个不同类别(categoryID)中的每一个返回3个(且仅3个)不同的项目(projectID)

  2. 将1个或多个服务(serviceID)添加到每行的末尾。因此,一行可以是projectID = 3,categoryID = 3,serviceID = 5 ....而第二行可以是projectID = 1,categoryID = 3,serviceID = 15,serviceID = 7,serviceID = 4(注意每行有不同数量的serviceID)

  3. 据我所知,'2。'是不可能的,因为每一行都必须有一定数量的细胞...所以我所追求的是实现这一目标的最佳查询......

    我认为它的结果是对于记录的每个不同serviceID(在与projectID匹配的projectservice表中)重复具有相同projectID和serviceID的行的结果

    或两个单独的查询,其中第一个只为每个x5 categoryID找到x3 distinct projectID,而第二个查询使用那些projectID返回projectservice表中与该projectID匹配的所有记录....

    还是有更好的方法???

0 个答案:

没有答案
相关问题