Question

Hi here is my tables..

Table Sites

     sid  sname       uid
    ----  ----------  ----
       1  aaa.com      1
       5  bbb.com      1 

Table keywords_s

     kid  skeywoird       
    ----  ----------  
       1  word1    
       2  word2

Table matchon

mid    uid    sid     kid       
----  ------  -----  -----
   1    1        1     1      
   2    1        1     2    

Table rank

 mid   rank    dateon           url       
----  ------   -------         -----
   2     7    08-May-2014      bbb.com/a
   2     6    09-May-2014      bbb.com/2  

And my query

"SELECT 
    keywords_s.skeyword,
    keywords_s.kid,
    sites.sname,
    rank.rank,
    rank.url,
    rank.dateon
    FROM matchon
    Inner JOIN sites ON sites.sid = matchon.sid
    Inner JOIN keywords_s ON keywords_s.kid = matchon.kid
    Inner JOIN rank ON rank.mid = matchon.mid
    where matchon.uid = :uid and sites.sname = :sname and sites.deactive != '1'
    group by keywords_s.skeyword order by rank.rank
    "

I am getting output

rank   keyword    dateon        url       
----  ---------   -------      -----
   7   word2    08-May-2014    bbb.com/a

Output needed is

rank   keyword    dateon        url       
----  ---------   -------      -----
   6   word2    09-May-2014    bbb.com/2

Here what i want to get ...

1st Group by keywords_s.skeyword order by rank.rank (this is coming But)

2nd Order by rank.slno desc (not working)

(I need 2nd order to work so i can get latest rank and date with, group by skeyword and order by rank)

Était-ce utile?

La solution

SELECT keywords_s.skeywor
     , keywords_s.kid
     , sites.sname
     , rank.rank
     , rank.url
     , rank.dateon
FROM matchon JOIN sites ON sites.sid = matchon.sid
             JOIN keywords_s ON keywords_s.kid = matchon.kid
             JOIN rank ON rank.mid = matchon.mid AND
                          rank.dateon = (SELECT MAX(dateon) FROM rank WHERE mid =  matchon.mid)
WHERE matchon.uid = :uid and sites.sname = :sname and sites.deactive != '1'
GROUP BY keywords_s.skeyword order by rank.rank

Autres conseils

This should work as per your requirement

"Select * from(SELECT keywords_s.skeyword, keywords_s.kid, sites.sname, rank.rank, rank.url, rank.dateon FROM matchon Inner JOIN sites ON sites.sid = matchon.sid Inner JOIN keywords_s ON keywords_s.kid = matchon.kid Inner JOIN rank ON rank.mid = matchon.mid where matchon.uid = :uid and sites.sname = :sname and sites.deactive != '1' order by rank.rank desc)xyz group by xyz.skeyword "

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top