简体   繁体   English

在MySQL中联接具有多字段排序的两个表

[英]Joining two tables with multiple field sorting in MySQL

I have two tables and I have to join it. 我有两个桌子,我必须加入。 table structures are 表结构是

tblproducts --> id(int,pk), name(varchar) tblproducts-> id(int,pk),name(varchar)

tblphotos ---> id(int,pk), productid(int,fk), photo(varchar), display_order(int) tblphotos ---> id(int,pk),productid(int,fk),photo(varchar),display_order(int)

There can be more than one photos for each product, I need to get one photo with lowest display_order. 每个产品可以有一张以上的照片,我需要获得一张display_order最低的照片。

I need, tblproducts.id, tblproducts.name, tblphotos.photo(photo with least display_order) also I need to get the whole list as tblproducts.id in ascending order. 我需要tblproducts.id,tblproducts.name,tblphotos.photo(具有最小display_order的照片),我还需要以tblproducts.id的升序获取整个列表。

Select tblproducts.id, tblproducts.name, (Select Top 1 tblphotos.photo FROM tblphotos, tblproducts Where tblphotos.productid = tblproducts.id Order By display_order)
From tblproducts, tblphotos
Where tblproducts.id = tblphotos.productid
Order by  tblproducts.id

EDIT : Oppss! 编辑 :对不起! I didn't see tag. 我没有看到标签。 This is for MSSQL by the way. 顺便说一下,这是针对MSSQL的。

Yes this query looks like repeating. 是的,此查询看起来像重复。 I should delete Where clause. 我应该删除Where子句。

Select tblproducts.id, tblproducts.name, (Select Top 1 tblphotos.photo FROM tblphotos, tblproducts Where tblphotos.productid = tblproducts.id Order By display_order)
From tblproducts
Order by  tblproducts.id

I haven't tested the following query but it should work, give it a try: 我尚未测试以下查询,但它应该可以工作,尝试一下:

SELECT 
    p.id, p.name, f.photo 
FROM
    tblproducts p,
    (
        SELECT productid, MIN(display_order) AS min_display_order 
        FROM tblphoto 
        GROUP BY productid
    ) AS t,
    tblphoto f 
WHERE 
    p.id = t.productid AND 
    t.productid = f.productid AND 
    t.min_display_order = f.display_order 
ORDER BY p.id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM