2015-11-03 2 views
0

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

SQL, выглядит примерно так:

$organizations = $db->query(" 
    SELECT id, organization_name, owner_id 
    FROM organizations 
    ORDER BY created_on DESC 
    ")->fetchALL(PDO::FETCH_ASSOC); 

часть зрения я работаю с заключается в следующем:

<?php foreach($organizations as $organization): ?> 
    <tr> 
    <td><?php echo e($organization['organization_name']); ?></td> 
    <td><?php echo e($organization['owner_id']); ?></td> 
    </tr> 
<?php endforeach; ?> 

Это работает точно так же, как и ожидалось, но на самом деле не то, что я хочу для отображения до owner_id (int и первичный ключ таблицы users)

Это приведет к созданию таблицы со всеми значениями, как в состоянии SQL и, в частности, он отобразит вид owner_id, который является внешним ключом, относящимся к моей таблице users.

Что я хочу сделать, это фактически показать name владельца, который принадлежит owner_id, а не просто показывать id (i.e ... 32). Как я могу отобразить связанный name пользователя из таблицы users на основе внешнего ключа user_id, на который ссылаются?

+0

Можете ли вы быть более ясным с ожидаемыми результатами? – Thamilan

ответ

1

Чтобы связать две таблицы, вам необходимо использовать JOIN. Пример ниже связывает две таблицы по owner_id и включает в себя user_name. Вам нужно будет использовать псевдоним в SELECT в том случае, если в обеих таблицах существует любое из имен столбцов.

-- use alias and include user_name 
SELECT o.id, o.organization_name, u.user_id, u.user_name 
-- alias the table as "o" 
FROM organizations o 
-- alias the table as "u" 
JOIN users u 
    -- link the tables here on owner_id 
    ON o.owner_id = u.user_id 
ORDER BY o.created_on DESC 

Вы можете вывести значение user_name колонки в вашем PHP как так:

<td><?php echo e($organization['user_name']); ?></td> 
2

Вы можете использовать JOIN.

$organizations = $db->query(" 
    SELECT organizations.id, organizations.organization_name, 
    users.user_name 
    FROM organizations 
    JOIN users ON organizations.owner_id = users.user_id 
    ORDER BY organizations.created_on DESC 
    ")->fetchALL(PDO::FETCH_ASSOC); 

Тогда в поле зрения, он может быть использован в качестве

<?php foreach($organizations as $organization): ?> 
    <tr> 
    <td><?php echo e($organization['organization_name']); ?></td> 
    <td><?php echo e($organization['user_name']); ?></td> 
    </tr> 
<?php endforeach; ?> 
Смежные вопросы