0

TABLE 1

SELECT * FROM page WHERE public = 1 order by*****results of table 2****** ASC

table 2

SELECT * FROM abonnement where page_id = $page_id AND (date > NOW() OR gratis = 1)

COUNT ROWS TABLE 2 AND PUT IT IN TABLE 1 ORDER BY....

4

3 回答 3

1
select p.* 
from page p
inner join abonnement a on p.page_id = a.page_id
where p.public = 1 
and (a.date > NOW() OR a.gratis = 1)
order by count(a.id) desc
于 2013-07-14T14:22:15.437 回答
0

It sounds like you need a group by and a left outer join:

SELECT p.*
FROM page p 
LEFT OUTER JOIN
     (SELECT page_id, COUNT(*) AS cnt
      FROM abonnement
      WHERE (date > NOW() OR gratis = 1)
      GROUP BY page_id
     ) a
     ON p.page_id = a.page_id
WHERE p.public = 1
ORDER BY a.cnt ASC;

The left outer join ensures that you do not lose any rows in page in case there are no matching rows in the second query.

Also note that I removed the condition page_id = $page_id. That is replaced by the on clause.

I would also suggest include a.cnt in the select clause so you actually see the count.

于 2013-07-14T14:36:15.723 回答
0

I think the he only needs use an update statement with a nested query inside it...

update table t2
 set count = (select count(*) from table1 t1 where t1.filed=t2.field and other conditions)
where other table2 conditions
于 2013-07-14T15:03:45.327 回答