2015-08-06 9 views
0

у меня есть:Multiple внутреннего соединения, когда таблицы имеют столбец с таким же именем

SELECT * FROM products 
    INNER JOIN cat1 ON products.maincategory=cat1.rid 
    INNER JOIN cat2 ON products.cat2=cat2.rid 

Он отображает всю информацию в порядке, но если я echo $row_rsProducts['category'] у меня нет возможности сказать ли категория из таблицы cat1 или таблиц cat2. Как я могу это исправить?

enter image description here

+0

теперь ваше изображение и запрос ничего не смыслит :) ... но относительно вашего эха ... вы должны, когда 'select' дать псевдоним. выберите p.id как product_id и т. д., затем выполните эхо с использованием псевдонима, т. е. product_id – MrSimpleMind

+0

. Ваш код будет легче читать с форматированием. Проверьте кнопку с надписью «{}». – aemxdp

+1

Возможный дубликат [MySQL INNER JOIN Alias] (http://stackoverflow.com/questions/10724324/mysql-inner-join-alias) –

ответ

0

не используя SELECT *, но на самом деле присвоения имен столбцов и дать псевдоним каждому из одноименных столбцов или ссылки на них по имени таблицы и столбца

1

Вы должны дать псевдоним для элементов, поступают из cat1 и cat2:

SELECT products.*, 
     manufacturer.*, 
     cat1.rid as c1rid, 
     cat1.category as c1category, 
     ifnull(cat2.rid,'') as c2rid, 
     ifnull(cat2.category,'') as c2category 
FROM products 
INNER JOIN manufacturer ON products.manufacturer=manufacturer.rid 
INNER JOIN cat1 ON products.maincategory=cat1.rid 
LEFT OUTER JOIN cat2 ON products.cat2=cat2.rid 

и чем использовать их, как это: echo $row_rsProducts['c1category']

+0

Спасибо, Фабиен, который сделал это. – user4367436

+0

Единственная проблема, которую я только осознал, заключается в том, что если cat2 NULL или пустой, он не будет показывать запись. Есть ли способ исправить это? – user4367436

+0

Вам нужно изменить 'INNER JOIN' на' LEFT OUTER JOIN' и использовать функцию 'IFNULL' для отображения значения emply вместо null в' SELECT'statement. Повторите мой ответ. –