2016-06-20 3 views
0

У меня есть небольшая проблема с моим SQL-запросом, я проверил много вопросов об этой проблеме, но не нашел, как их решить.INNERJOIN + SELECT специфический столбец

Мой стол images и plaquettes получили оба столбца "domaine", но я хочу выбрать только из таблицы plaquettes. Этот sql возвращает мне ошибку FetchAll.

Я не знаю, почему этот простой INNER JOIN не работает. Спасибо за помощь

<?php 
    $sqlimg = "SELECT *, plaquettes.domaine AS plaquettedomaine FROM images INNER JOIN plaquettes ON images.id = plaquettes.images_id"; 
    $resultsimg = $connexion->query($sqlimg); 
    $plaquettesimg = $resultsimg->fetchAll(PDO::FETCH_OBJ); 

foreach($plaquettesimg as $pimg) { ?> 
<input type="hidden" value="<?php echo $pimg->name ?>" name="delete_img" > 
    <input type="hidden" value="<?php echo $pimg->plaquettedomaine ?>" name="delete_domaine" > 
<?php } ?> 
<button onclick="return confirm('Voulez vous vraiment supprimer cette plaquette ?')" type="submit" class="btn pull-left btn-danger" name="id" id="id" value="<?php echo $p->id ?>">Supprimer</button> 
</form> 
+3

Правильно объявляйте свои таблицы, не используйте SELECT * –

+0

Вы имеете в виду, что я люблю 'SELECT images.name AS imgname, plaquettes.domaine AS plaquettedomaine'? – Hightline

+0

Да, дай это. –

ответ

2
SELECT *, plaquettes.domaine AS plaquettedomaine FROM images INNER JOIN plaquettes ON images.id = plaquettes.images_id 

Должно быть что-то вроде этого

SELECT p.*, p.domaine AS plaquettedomaine 
FROM 
    images i 
    INNER JOIN plaquettes p 
    ON i.id = p.images_id 

Примечание Я использую псевдонимы таблиц, чтобы сделать его легче следовать и меньше набирать. Для псевдонима таблицы просто введите пробел после имени таблицы и желаемого псевдонима.

Причина, по которой вы получали все столбцы, это «*». Это вернет все для обеих таблиц. Поэтому, переключившись на p.*, вы ограничиваете это для всех столбцов от plaquettes. Обратите внимание, что в большинстве ситуаций не считается хорошим кодом для использования * из-за возможных изменений схемы в ваших базовых таблицах, что, скорее всего, нарушит ваше приложение. Вы должны указать конкретные столбцы, которые вы хотите. p.Id, p....