2014-10-17 1 views
0

У меня есть несколько таблиц в mysql, которые связаны отношением. Каждый из них имеет свой уникальный идентификатор и данные. Только при попытке запросить их я получаю странный результат:ошибка ключа отношения php

(use print_r) 
Array ([0] => Array ([id] => 1 
         [0] => 1 
         [tbl2_id] => 1 
         [1] => 1 
         [tbl3_id] => 1 
         [2] => 1 
         [3] => 1 
         [name] => name1 
         [4] => name1 
         [surname] => ... 
        ) 
     ) 

Я не хочу, чтобы 0 и так далее.

Просто, например, он должен выглядеть следующим образом:

(use print_r) 
Array ([0] => Array ([id] => 1 
         [tbl1_id] => 1 
         [tbl2_id] => 1 
         [tbl2_tbl1id] => 1 
         [tbl3_id] => 1 
         [tbl2_tbl1id] => 1 ... 
        ) 
     ) 

или что-то подобное. Я использую PDO и когда он вызывает SQL выглядит примерно так:

SELECT * 
FROM `tbl` 
    INNER JOIN (tbl2, tbll) 
    ON tbl.tbl1_id=tbl1.id 
     AND tbl.tbl2_id=tbl2.id 
WHERE 1 

после использования его в MySQL получает такой эффект как на картинке (Выполнить SQL запросов/запросы на databas)

http://i.stack.imgur.com/FSCs0.png

+0

некоторые немногие изменения базы данных, но в основном это сырье вместо идентификатора дал совет писать $ строки [ «tbl1.id»] или $ грести [ «tbl2.id»], а не в MySQL показывает мне два раза «id» и print_r отображаются как [0] или [1] и т. д. – ubgsdnhfj

+0

Можете ли вы предоставить код, чтобы показать, как вы запрашиваете и получаете результат? – FlipMcF

ответ

1

Похоже, вы используете PDOStatement :: fetch() с fetch_style, установленным в PDO :: FETCH_BOTH - по умолчанию.

http://php.net/manual/en/pdostatement.fetch.php

использование PDO :: FETCH_ASSOC как fetch_style, и вы должны получить то, что вы ищете.

$result = $sth->fetch(PDO::FETCH_ASSOC); 
print_r($result); 
+0

теперь работает, но не так, как я хотел. Дело в том, что я имел в виду, что зубы оставались двумя версиями «id» или других таблиц, таких как «имя», только чтобы они были дискриминированы, потому что у меня есть таблица пользователя, в которой вы «имя», и я есть таблица tbl1, в которой вы также являетесь «именем», и этим мне исчезает. Единственное решение - изменить имена таблиц? – ubgsdnhfj

+0

Тогда не 'SELECT *' - выберите только нужные вам поля. Вы также можете использовать таблицы псевдонимов - SELECT tb1.name FROM ... ' – FlipMcF

+0

Ответ на ответ, если« это работает ». Ваш комментарий - отдельный вопрос. – FlipMcF