2015-10-08 3 views
0

Эй, я попробовал эту нить, но она не работает, и я не могу понять, почему ...ID потерял после левой присоединиться на столе

вот мой SQL:

SELECT * FROM gone_items 
     LEFT JOIN items 
     ON gone_items.item_ID=items.ID 
     WHERE 
     gone_items.aus_ID='$ID' 
     ORDER BY items.name ASC 

Теперь я получить через PHP и иметь строку $ row и попробовать другой mysql для получения отдельных идентификаторов таблицы go_items. Но если я использую $ row ['ID'], я получаю идентификатор items.ID, а не идентификатор go_items.ID.

Я попытался установить переменную вручную в первом запросе, но он не работает.

Я также попытался это: MYSQL Left join A.table and b.table while retaining a.table id

Также не помог мне ...

Все, что я хочу, чтобы сохранить идентификатор (первичный ключ) из таблицы gone_items ..

Can кто-нибудь скажет мне, что я делаю неправильно?

Любовь гр

EDIT

 //Query for Joined infos 
$sqlx="SELECT foto_res_ausgeliehene_geg.ID, foto_res_ausgeliehene_geg.aus_ID, foto_res_ausgeliehene_geg.geg_ID, foto_res_ausgeliehene_geg.zusaetzliches, foto_res_gegenstaende.ID, foto_res_gegenstaende.bezeichnung, foto_res_gegenstaende.seriennummer, foto_res_gegenstaende.interne_seriennummer, foto_res_gegenstaende.zusaetzliches FROM foto_res_ausgeliehene_geg 
     LEFT JOIN foto_res_gegenstaende 
     ON foto_res_ausgeliehene_geg.geg_ID=foto_res_gegenstaende.ID 
     WHERE 
     foto_res_ausgeliehene_geg.aus_ID='$ID' 
     ORDER BY foto_res_gegenstaende.bezeichnung ASC 
     "; 
      $ergebnisx = mysqli_query($db,$sqlx); 
      while ($zeilex = mysqli_fetch_assoc($ergebnisx)) 
      { 
       //Query for individual infos 
       $sqly="SELECT * FROM foto_res_ausgeliehene_geg 
         WHERE `geg_ID`='".$zeilex['ID']."' 
         AND `aus_ID`='$ID' 
         GROUP BY `geg_ID` 
         "; 
         $ergebnisy = mysqli_query($db,$sqly); 
         while ($zeiley = mysqli_fetch_assoc($ergebnisy)) 
         {}; 

Теперь я выбрать все элементы по отдельности. Foto_res_ausgeliehene_geg.ID все еще сливается с foto_res_gegenstanede.ID из-за LEFT JOIN.

Так что, если я получаю доступ к $ zeilex ['ID'] im, получающему идентификатор foto_res_gegenstaende.ID.

Помогло бы, если бы я переименовал поле ID в одной из таблиц, чтобы сказать item_ID?

Спасибо большое.

Любовь Gram.

+0

Не используйте '' * выберите. Явно перечислим столбцы, которые вы хотите выбрать. Вуаля! Ваша проблема будет исправлена. –

+0

Я не работал ... Не знаю почему.Если я, например, перечислил все, кроме файла go_items.ID, то выборка просто пуста ... – Gramrock

+0

Как указано в ваших комментариях, если явным образом выберем идентификатор и он будет пустым, мне будет интересно увидеть две схемы таблицы, тогда что-то должно быть не так, или давайте посмотрим, какой код там выбирает, что-то также может быть неправильным. –

ответ

1

Вместо использования select *, вы должны явно указать, какие элементы вы хотите выбрать. Кроме того, вы можете столкнуться с несколькими полями id. В вашем случае что-то вроде:

select gone_items.id, gone_items.column1, gone_items.column2, items.column1, items.column2 

Также считается хорошей практикой, чтобы ограничить объем данных, которые там выбраны. Но тем временем тоже весьма спорно, что это правильный путь. Performance issue in using SELECT *?

0

РАБОТЫ!

Я просто переименовал один из ключей первичного идентификатора в другое, в этом случае один из них получил идентификатор -> item_ID. Другой по-прежнему ID таким образом, чтобы левое соединение не сливало их.

Yolo

EDIT

РАБОТА КОД

$sqlx="SELECT foto_res_ausgeliehene_geg.item_ID, foto_res_ausgeliehene_geg.aus_ID, foto_res_ausgeliehene_geg.geg_ID, foto_res_ausgeliehene_geg.zusaetzliches, foto_res_gegenstaende.ID, foto_res_gegenstaende.bezeichnung, foto_res_gegenstaende.seriennummer, foto_res_gegenstaende.interne_seriennummer, foto_res_gegenstaende.zusaetzliches FROM foto_res_ausgeliehene_geg 
     LEFT JOIN foto_res_gegenstaende 
     ON foto_res_ausgeliehene_geg.geg_ID=foto_res_gegenstaende.ID 
     WHERE 
     foto_res_ausgeliehene_geg.aus_ID='$ID' 
     ORDER BY foto_res_gegenstaende.bezeichnung ASC 
     "; 
      $ergebnisx = mysqli_query($db,$sqlx); 
      while ($zeilex = mysqli_fetch_assoc($ergebnisx)) 
      { 
       //Query for individual infos 
       $sqly="SELECT * FROM foto_res_ausgeliehene_geg 
         WHERE `item_ID`='".$zeilex['item_ID']."' 
         "; 
         $ergebnisy = mysqli_query($db,$sqly); 
         while ($zeiley = mysqli_fetch_assoc($ergebnisy)) 
         { 
+0

Хорошо, что вы работали только для того, чтобы очистить все, что dbo не объединит столбцы, а скорее обратится к нему по-другому, в качестве примера будет доступно соединение с двумя столбцами с идентификатором имени, как показано в таблице table1.id, table2.id. Слияние, вероятно, происходит в реализации где-то, чтобы улучшить понимание, проверьте http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins для соединений и попытайтесь запустить запрос непосредственно на db, чтобы увидеть возвращаемые строки и столбцы, счастливое кодирование :) –

Смежные вопросы