左连接将主键连接到普通列会导致严重破坏

时间:2015-09-18 06:07:05

标签: php mysql

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

Eloquent Left Join, getting unexpected result

这是我的表格结构,只是为了概述。

选项:

enter image description here

活动元素:

enter image description here

嗯,这确实是同样的问题,但我认为这是因为Eloquent。当我尝试使用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.idevent_meta是{{} 1}}

我想要发生的事情是首先检索a.meta_value以检查它是否为空。如果它是空的,我将获得options.value的值来输出它。

例如,在我上面的查询中,我想获得event_meta.meta_value所谓的徽标。它应该获得图像名称的输出。但由于我已连接到meta_key表,因此应该获得options。输出options.value时,它应为空白。由于徽标的options.value不等于任何meta_value。但它正在检索options.id值。

2 个答案:

答案 0 :(得分:1)

您的“充值”options.id值为6. event_meta.meta_value中您的(可能是二进制图片)徽标值的数值为6,因为它以“6b3b .....”开头。这就是他们比较平等的原因。

将数字字段与字符字段进行比较时,MySQL将获取字符字段的数值并将其与数字进行比较。您可能缺少的是MySQL中的字符字段“123abc3478uweefauiofyh3489h”的数值为123.

将您的数字options.id字段转换为与您的JOIN中event_meta.meta_value相同的类型。

答案 1 :(得分:0)

使用此功能:

$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';");