php - 试图加入 3 个 mysql 表,但我没有得到预期的结果。什么是错误?

标签 php mysql

下面的mysql查询

SELECT *
FROM alerts_list l, alerts_data d, alerts_push_data p
WHERE p.push_data_hash = d.alerts_data_hash
AND p.push_data_alert_id = l.alerts_id
AND d.alerts_data_id = l.alerts_id
AND d.alerts_data_hash =  'JiaYRSVNZxgE'

通过连接三个表显示 JiaYRSVNZxgE 的结果。

这是我使用的表和我想在它们之间连接的列:

表 alerts_list

列:alerts_id

enter image description here

表 alerts_push_data

列:push_data_alert_id

列:push_data_hash

enter image description here

表 alerts_data

列:alerts_data_id

列:alerts_data_hash

enter image description here

我想要实现的是:

push_data_alert_id 连接到 alerts_id

alerts_data_id 连接到 alerts_id

但仅显示 alerts_data_hashpush_data_hash"abcdef" 的结果

很遗憾我的查询结果没有找到结果,但是现实中是有结果的。 我做错了什么?

最佳答案

您可以像这样使用 MySQL JOINS 很容易地执行该操作:

         <?php
            // USING NORMAL JOIN:
            // WE NOW ADD AN EXTRA LAYER (THE VARIABLE $fldVal) 
            // IN THE CASE THAT YOUR VALUE ('JiaYRSVNZxgE') IS DYNAMIC...
            $fldVal = 'JiaYRSVNZxgE';
            $sql    = "SELECT DISTINCT *
                            FROM alerts_list l 
                            JOIN alerts_data d ON d.alerts_data_id=l.alerts_id
                            JOIN alerts_push_data p ON p.push_data_alert_id=l.alerts_id
                            WHERE d.alerts_data_hash='" . $fldVal . "'";



            // USING LEFT JOIN:
            // WE NOW ADD AN EXTRA LAYER (THE VARIABLE $fldVal) 
            // IN THE CASE THAT YOUR VALUE ('JiaYRSVNZxgE') IS DYNAMIC...
            $fldVal = 'JiaYRSVNZxgE';
            $sql    = "SELECT DISTINCT *
                            FROM alerts_list l 
                            LEFT JOIN alerts_data d ON d.alerts_data_id=l.alerts_id
                            LEFT JOIN alerts_push_data p ON p.push_data_alert_id=l.alerts_id
                            WHERE d.alerts_data_hash='" . $fldVal . "'";



            // USING INNER JOIN:
            // WE NOW ADD AN EXTRA LAYER (THE VARIABLE $fldVal) 
            // IN THE CASE THAT YOUR VALUE ('JiaYRSVNZxgE') IS DYNAMIC...
            $fldVal = 'JiaYRSVNZxgE';
            $sql    = "SELECT DISTINCT *
                            FROM alerts_list l 
                            INNER JOIN alerts_data d ON d.alerts_data_id=l.alerts_id
                            INNER JOIN alerts_push_data p ON p.push_data_alert_id=l.alerts_id
                            WHERE d.alerts_data_hash='" . $fldVal . "'";

::还有 GROUP BY CLAUSE 的新更新::

        <?php
            // WE NOW ADD AN EXTRA LAYER (THE VARIABLE $fldVal) 
            // IN THE CASE THAT YOUR VALUE ('JiaYRSVNZxgE') IS DYNAMIC...
            $fldVal = 'JiaYRSVNZxgE';



            $sql2    = "SELECT DISTINCT *
                            FROM alerts_list AS A_LIST
                            LEFT JOIN alerts_push_data A_PUSH ON A_PUSH.push_data_alert_id=A_LIST.alerts_id
                            LEFT JOIN alerts_data A_DATA ON A_DATA.alerts_data_hash=A_PUSH.push_data_hash
                            WHERE A_DATA.alerts_data_hash='" . $fldVal . "'
                            GROUP BY A_LIST.alerts_id";

测试用例查询

                    SELECT DISTINCT *
                            FROM alerts_list AS A_LIST
                            LEFT JOIN alerts_push_data A_PUSH ON A_PUSH.push_data_alert_id=A_LIST.alerts_id
                            LEFT JOIN alerts_data A_DATA ON A_DATA.alerts_data_hash=A_PUSH.push_data_hash
                            WHERE A_DATA.alerts_data_hash='iSg2loGJDaWs'
                            GROUP BY A_LIST.alerts_id

结果

这些都是意料之中的,因为除了具有 10 行的 alerts_list 之外,我在所有其他表中仅模拟了 2 行。

转储上述查询的结果 var_dump using the Query Above

表:alerts_list

Table: alerts_list

表:alerts_data Table: alerts_data

表:alerts_push_data Table: alerts_push_data

关于php - 试图加入 3 个 mysql 表,但我没有得到预期的结果。什么是错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37468538/

相关文章:

php - SCORM 与 PHP/Yii 的集成

php - 如何修复apache服务器

php - 安全PHP登录SQL注入(inject)

mysql - Rails 4 备用主键与 MySQL

php - 使用 PHP 提取 .zip 文件

php - SQL 中的变量 ALTER TABLE AUTO_INCREMENT

php - 简化php代码按列和排序结果从mysql数据库中选择数据

java - 将 vector 添加到现有的 jTable 以显示数据库中的记录

mysql - 如何更改 'yum install xxx' 的目标目录?

mysql - 将单列 CSV 导入 MySQL