2016-01-06 2 views
1

Я пытаюсь выбрать все идентификаторы адресов из одной таблицы и присоединиться к атрибутам из других таблиц. Мне нужно объединить значения в таблицах A и C с помощью entity_id, однако, поскольку таблицы имеют одно и то же ключевое значение, второе соединение заменяет значение первого.MySQL соединяет таблицы и получает значения, имеющие одно и то же имя ключа

Что я здесь делаю неправильно?

$query = "SELECT 
     A.parent_id, 
     B.value, 
     C.value 
    FROM customer_address_entity AS A 
    LEFT JOIN customer_address_entity_varchar AS B 
     ON A.entity_id = B.entity_id 
    LEFT JOIN customer_address_entity_text AS C 
     ON A.entity_id = C.entity_id 
    LIMIT 100"; 

    var_dump($query); 

Но я получаю массив 4. a.value в перезаписи C.value

array (size=4) 
    'parent_id' => string '7' (length=1) 
    'entity_id' => string '6' (length=1) 
    'value' => string '19 STANDIFORD CT' (length=16) 
    'attribute_id' => string '25' (length=2) 
+0

Что вы подразумеваете под словом «второе соединение заменяет значение первого»? – ForguesR

+0

Я имею в виду, что у меня должен быть массив из 5 не 4, но поскольку я выбираю ab.value и ac.value из таблиц, я получаю только одно ключевое «значение» в массиве, что имеет смысл, потому что может быть только один уникальный ключ в массиве, но как я могу изменить имя ключа для каждого или получить данные? – DOfficial

+0

Хорошо, я вижу. Можете ли вы предоставить код для получения результатов запроса? – ForguesR

ответ

2

Может быть, вы могли бы псевдоним одного столбца, чтобы дать ему уникальное имя? т.е.

$query = "SELECT 
    A.parent_id, 
    B.value, 
    C.value as Foobar 
FROM customer_address_entity AS A 
LEFT JOIN customer_address_entity_varchar AS B 
    ON A.entity_id = B.entity_id 
LEFT JOIN customer_address_entity_text AS C 
    ON A.entity_id = C.entity_id 
LIMIT 100"; 
... 

EDIT: Есть вероятно другие способы сделать это, но это было бы полезно для меня, чтобы увидеть некоторые примеры данных и, возможно, некоторый код для обработки результатов.

+0

Спасибо! именно то, что мне нужно! – DOfficial

+0

Можете ли вы использовать псевдоним как значение в строке? Например, могу ли я указать значение C.value как C.title? – DOfficial

+0

Верьте или нет, в настоящий момент у меня нет базы данных MySQL, но я _believe_ вы могли бы окружить нужный псевдоним в кавычках, чтобы префикс таблицы сохранялся. Например: 'C.value как" C.title "'. Тем не менее, важно отметить, что это приведет к тому, что префикс выйдет в ** все **, включая ключи в результирующей структуре массива PHP. Поскольку префикс обычно не выходил в результирующей структуре, я не знаю, вижу ли я преимущество в этом. Можете ли вы подробнее рассказать о том, что ищете? – TheFrog