Ссылка ниже связана с моим вопросом:
Eloquent Left Join, получивший неожиданный результат
Вот моя таблица, чтобы дать обзор.
Опции:
Событие Meta:
Ну, это действительно та же проблема, но я думал, что это из-за Красноречивого. Когда я попытался использовать 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_value
То, что я хочу сделать на моем конце, – сначала получить значение параметра. Сначала проверить, пуст ли он. Если он пуст, я получу значение event_meta.meta_value
для его вывода.
Так, например, по моему запросу выше, я хочу получить логотип meta_key
. Он должен получить вывод имени изображения. Но так как я подключен к таблице options
он должен получить options.value
. При выдаче значения options.value
он должен быть пустым. Поскольку meta_value
логотипа не соответствует любым параметрам options.id
. Но он возвращает значение Top Up
.
Значение параметра «Top Up» options.id
равно 6. Числовое значение вашего логотипа (предположительно двоичного изображения) в event_meta.meta_value
равно 6, так как оно начинается «6b3b …..». Вот почему они сравнивают равные.
При сравнении числового поля с полем символов MySQL будет принимать числовое значение поля символа и сравнивать его с номером. То, что вам не хватает, состоит в том, что числовое значение символьного поля, такого как «123abc3478uweefauiofyh3489h» в MySQL, равно 123.
event_meta.meta_value
числовое поле options.id
в том же типе, что и event_meta.meta_value
в вашей JOIN.
Использовать это:
$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';");