【问题标题】:inner join to count rows and order内连接以计算行数和顺序
【发布时间】:2016-07-12 02:13:21
【问题描述】:

我正在尝试阅读有关某个用户的一些信息,但是,我执行了 3 个查询来计算“FOLLOWERS”和“LINKS”,我知道这可以通过一个查询来完成,使用内部联接等。我不知道怎么做,有人可以帮帮我吗?

我是巴西人,抱歉英语不好。

$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;

【问题讨论】:

  • 您使用的是 MySQL 还是 Oracle?请删除不正确的标签。
  • 您可能会对本网站的葡萄牙语版本pt.stackoverflow.com 感兴趣。此外,您应该修复标签——Oracle 和 MySQL 是非常不同的数据库。
  • 如果您只想获取匹配行的计数,请使用 SELECT COUNT(*) 而不是读取每一行的循环。

标签: php oracle pdo


【解决方案1】:

通过一个查询,您可以试试这个:

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

【讨论】:

  • QLSTATE[HY000]:一般错误:918 OCIStmtExecute:ORA-00918:列定义不明确(ext\pdo_oci\oci_statement.c:148)。
  • @HalyssonTevesDosSantos 您能否在 Oracle CLI 中运行此查询并检查此错误是否仍然存在?
  • ORA-00918: coluna definida de maneira ambígua 00918. 00000 - “列定义不明确” *原因:*操作:Erro na linha: 1 Coluna: 77
  • 谢谢你,工作!你想得到一些钱来帮助我完成我的社交网络吗?已经完成了90%,我只需要更正一些错误和功能,我们可以通过teamviewer来完成。我通过paypal付款,如果您有兴趣,请给我您的电子邮件...
  • 如何通过“FOLLOWERS_CNT,LINKS_CNT DESC”订购?谢谢。
【解决方案2】:

为此使用子查询,在一行中您可以获得关注者和链接的总行

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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 2011-01-12
    • 2013-12-05
    相关资源
    最近更新 更多