表1
SELECT * FROM page WHERE public = 1 order by*****results of table 2****** ASC
表2
SELECT * FROM abonnement where page_id = $page_id AND (date > NOW() OR gratis = 1)
计算表2的行数,并按……将其按表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
听起来您需要group by
和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;
left outer join
确保在第二个查询中没有匹配行的情况下不会丢失page
中的任何行。
还要注意,我删除了条件page_id = $page_id
。它被on
子句所取代。
我还建议在select
子句中包含a.cnt
,这样您就可以实际看到计数。
我认为他只需要使用一个带有嵌套查询的更新语句…
update table t2
set count = (select count(*) from table1 t1 where t1.filed=t2.field and other conditions)
where other table2 conditions