I'm trying to read some things about some user, but, I execute 3 queries to count "FOLLOWERS" and "LINKS", and I know that is possible do it with one query, using inner join, etc. I don't know how to make this, someone can help me?
I'm brazillian, sorry for the bad english.
$Read = new Read();
$Read->FullRead("SELECT AUTHORS_NAME, AUTHORS_LASTNAME, AUTHORS_PHOTO, AUTHORS_FRIENDLY_URL, AUTHORS_ID FROM AUTHORS");
if ($Read->getResult()):
foreach ($Read->getResult() as $AUTHORS):
extract($AUTHORS);
$COUNT = 0;
$READ_FOLLOWER = new Read();
$READ_FOLLOWER->FullRead("SELECT AUTHORS_ID FROM FOLLOWERS WHERE AUTHORS_ID = {$AUTHORS_ID}");
if ($READ_FOLLOWER->getResult()):
foreach ($READ_FOLLOWER->getResult() as $READ_FOLLOWER_ITEM):
$COUNT++;
endforeach;
endif;
$LINK_COUNT = 0;
$READ_LINKS = new Read();
$READ_LINKS->FullRead("SELECT LINK_AUTHORS FROM LINKS WHERE LINK_AUTHORS = {$AUTHORS_ID}");
if ($READ_LINKS->getResult()):
foreach ($READ_LINKS->getResult() as $READ_LINKS_ITEM):
$LINK_COUNT++;
endforeach;
endif;
//ECHO ON ALL VARIABLES
endforeach;
endif;
With one query, you can try this:
SELECT A.AUTHORS_NAME, A.AUTHORS_LASTNAME, A.AUTHORS_PHOTO, A.AUTHORS_FRIENDLY_URL, A.AUTHORS_ID,
COALESCE(T1.CNT, 0) AS FOLLOWERS_CNT,
COALESCE(T2.CNT, 0) AS LINKS_CNT
FROM AUTHORS A
LEFT JOIN (
SELECT AUTHORS_ID, COUNT(1) AS CNT FROM FOLLOWERS GROUP BY AUTHORS_ID
) T1 ON A.AUTHORS_ID = T1.AUTHORS_ID
LEFT JOIN (
SELECT LINK_AUTHORS, COUNT(1) AS CNT FROM LINKS GROUP BY LINK_AUTHORS
) T2 ON A.AUTHORS_ID = T2.LINK_AUTHORS
ORDER BY T1.CNT, T2.CNT DESC
Use sub query for this, in a single row you can get the total rows of followers and links
SELECT *,
(SELECT SUM(B.AUTHORS_ID) FROM FOLLOWERS B WHERE A.AUTHORS_ID=B.AUTHORS_ID) FOLLOWERS,
(SELECT SUM(C.AUTHORS_ID) FROM LINKS C WHERE A.AUTHORS_ID=c.AUTHORS_ID) LINKS
FROM AUTHORS A
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.