简体   繁体   中英

inner join to count rows and order

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM