Mysql查询选择具有不同列值的结果

时间:2012-09-17 14:13:40

标签: php mysql sql

我有一张展示书籍的桌子。但是,我希望每个唯一的电子邮件地址(strContactEmail)只显示一本图书。我尝试了下面的查询,它没有用。任何帮助非常感谢。

$sql =  "SELECT lngbookid, strTitle, strAuthor, strcoursecode, strISBN, ".
        " strcontactname, DISTINCT(strContactEmail) AS strContactEmail, ".
        " curPrice, ysnsalerent, dtmpostdate, memcomments, school, ".
        " ASIN, BookIMG, ISBN10, ISBN13, Updated, ".
        " datetime, user_ip, NoOtherBooks ".
        " FROM tblbooks ".
        " WHERE strcoursecode LIKE '%$search%'  ".
        " ORDER BY datetime DESC LIMIT 50";

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

最简单的方法:

SELECT max(lngbookid) as lngbookid,
       max(strtitle) as strtitle,
       max(strauthor) as strauthor,
       max(strcoursecode) as strcoursecode,
       max(strisbn) as strisbn,
       max(strcontactname) as strcontactname,
       strcontactemail,
       max(curprice) as curprice,
       max(ysnsalerent) as ysnsalerent,
       max(dtmpostdate) as dtmpostdate,
       max(memcomments) as memcomments,
       max(school) as school,
       max(asin) as asin,
       max(bookimg) as bookimg,
       max(isbn10) as isbn10,
       max(isbn13) as isbn13,
       max(updated) as updated,
       max(datetime) as datetime,
       max(user_ip) as user_ip,
       max(nootherbooks) as nootherbooks
FROM   tblbooks
WHERE  strcoursecode LIKE '%$search%'
GROUP BY strcontactemail
ORDER  BY datetime DESC
LIMIT  50 

<击>

修改 好吧,上面实际上太“假”了。更好的方法是(提供“lngbookid”列是主键):

SELECT a.lngbookid,
       a.strtitle,
       a.strauthor,
       a.strcoursecode,
       a.strisbn,
       a.strcontactname,
       a.strcontactemail,
       a.ontactemail,
       a.curprice,
       a.ysnsalerent,
       a.dtmpostdate,
       a.memcomments,
       a.school,
       a.asin,
       a.bookimg,
       a.isbn10,
       a.isbn13,
       a.updated,
       a.datetime,
       a.user_ip,
       a.nootherbooks
FROM   tblbooks AS a
       JOIN (SELECT strcontactemail,
                    Max(lngbookid) AS lngbookid
             FROM   tblbooks
             GROUP  BY strcontactemail) AS b
         ON ( a.strcontactemail = b.strcontactemail
              AND a.lngbookid = b.lngbookid )