Php 将主键连接到普通列的左连接会造成严重破坏

Php 将主键连接到普通列的左连接会造成严重破坏,php,mysql,Php,Mysql,以下链接与我的问题有关: 下面是我的表结构,只是给大家一个概述 选项: 事件元: 嗯,这确实是同一个问题,但我认为这是因为雄辩。当我试图使用PDO查询我链接上的问题时。它仍然如此 $query = $db->prepare( " SELECT * FROM event_meta a LEFT JOIN options b ON b.id = a.meta_value WHERE a.meta_key = 'logo' "

以下链接与我的问题有关:

下面是我的表结构,只是给大家一个概述

选项:

事件元:

嗯,这确实是同一个问题,但我认为这是因为雄辩。当我试图使用PDO查询我链接上的问题时。它仍然如此

$query = $db->prepare(
    "   SELECT      * FROM event_meta a
        LEFT JOIN   options b ON b.id = a.meta_value
        WHERE       a.meta_key = 'logo'
"); $query->execute();

$object = $query->fetchObject();

echo $object->value, '<br>';
echo $object->meta_value;
所以我做的是,我有一个名为event_meta的表,试图加入options表来连接它们,我使用b.id,event_meta的值是a.meta

我希望首先检索options.value以检查它是否为空。如果它为空,我将获取事件的meta.meta值来输出它

例如,在我上面的查询中,我想得到一个名为logo的meta_键。它应该获得图像名称的输出。但因为我连接到了选项表,所以它应该得到options.value。输出options.value时应为空。因为logo的meta_值不等于任何options.id。但它正在检索加满值。

使用以下方法:

您的充值选项.id值为6。事件_meta.meta_value中的二进制图像徽标值的数值为6,因为它开始于6b3b。。。。。。这就是为什么他们比较平等

当比较数字字段和字符字段时,MySQL将获取字符字段的数值并将其与数字进行比较。您可能缺少的是,MySQL中像123abc3478uweefauiofyh3489h这样的字符字段的数值是123


将您的numeric options.id字段强制转换为与加入中的event\u meta.meta\u值相同的类型。

@主持人,我正在尝试连接这两个字段,只是让您直观地看到我的表是什么样子。由于每个第一个字符(不是meta_值的全部值)都连接到我的选项id。因此,您需要选项表中的所有字符,而不是meta_值中的所有字符。实际上,只需复制select查询,了解查询数据时雄辩的尝试。所以我需要的是事件的元值和选项的值。我需要检查值是否为空,如果是的话,我就得去拿元_value@BrianCoolidge:请建议您需要的内容..1.您只需要meta_key=logo的两个表中的公用行,或meta_key=logo的meta_value中的所有行,以及选项表中的相应行..此外,根据meta_key='logo'的规定,您的meta_value prmary key value不应为298…@BrianCoolidge:显示您正在获得的输出和您需要的输出…根据您的查询,您应该按照以下方式获得输出-29,1,'logo','6b3b…。,NULL,NULL,NULL…。此外,您正在基于meta_值(看起来是longvarchar或文本类型字段)连接这两个表,因此它将终止性能。我将event_包更改为logo。仍然会产生相同的结果。我正在从选项表中获取加满值,但它应该是空的。因为logo的值像looong,所以我修改了我的问题。请看
$query = $db->prepare(
            "SELECT *
            FROM options
            LEFT OUTER JOIN event_meta
            ON options.id=event_meta.meta_value
            WHERE event_meta.meta_key= 'event_package';");