zhu*_*hou 1 mysql sql join left-join
table1: node
fields: nid, ,title,type,created
Run Code Online (Sandbox Code Playgroud)
QUERY1:
mysql_query(SELECT nid,title, type,created FROM `node` where type="provider" ORDER BY created DESC LIMIT 0 , 22)
table2: votingapi_vote
fields: content_id, value=1 or value=0, value_type=option
Run Code Online (Sandbox Code Playgroud)
QUERY2:
SELECT content_id,
SUM(CASE WHEN value=1 THEN 1
WHEN value=0 THEN -1
ELSE 0
END) AS ContentSum
FROM votingapi_vote
WHERE value_type = 'option'
GROUP BY content_id
ORDER BY ContentSum DESC
Run Code Online (Sandbox Code Playgroud)
content_id
值等于nid
值,但在表1中,nid
可能与表2没有一对一的对应关系.例如:
table 1 table2
nid content_id
1 1
2 3
3
Run Code Online (Sandbox Code Playgroud)
但与表1中的content_id
一一对应nid
.
现在,我想得到一个title list
.哪个是unmber 22
.的descending order
是根据ContentSum
和created
.有没有办法得到这个?我应该用left join
吗?我不知道如何让两个查询变成一个?
改写它:
表一结构{node}:
nid type title created
10 provider test one 1298107010
11 provider test two 1298107555
12 provider example one 1300524695
13 provider example two 1298081391
14 provider example three 1298082340
15 company example four 1298083519
16.... company example five 1298083559
Run Code Online (Sandbox Code Playgroud)
表二结构{votingapi_vote}:
content_id value value_type
10 1 option
10 0 option
11 1 option
12 0 option
15 3 percent
15 2 percent
16..... 0 option
Run Code Online (Sandbox Code Playgroud)
我想要:
获得22个冠军名单
...
test one
test two
example one
example two
...
Run Code Online (Sandbox Code Playgroud)
1,值nid
is等于content_id
表2中的值.
标题列表队列顺序是:
1,首先根据表2 content_id
降序列表列表(降序content_id使用"对于每个content_id,值为1的行数减去值为0的行数")
2,因为table2可能少于22个记录,并且当value = 1的行数减去value = 0的行数时具有相同的值.当出现这种情况时.使用created
表1中的字段来降序tile
<table1> left join <table2>
Run Code Online (Sandbox Code Playgroud)
意味着元组不必在table2中具有匹配元素,但是将包括table1中的所有元素.
<table1> right join <table2>
Run Code Online (Sandbox Code Playgroud)
意味着元组不必在table1中具有匹配元素,但是将包括table2中的所有元素.
归档时间: |
|
查看次数: |
849 次 |
最近记录: |