Сопоставить значения строки в таблице со значениями в столбце другой таблицы

0

У меня есть две таблицы:

+---------------+--------+
|      id1      |  name  |
+---------------+--------+
| 1             | test   |
| 2             | teest  |
| 3             | teeest |
+---------------+--------+

+-----+------------+---------+-----------+---------+
| id2 |    date    | morning | afternoon | evening | 
+-----+------------+---------+-----------+---------+
|   1 | 2017-12-14 |     1   |      2    |     1   |
|   2 | 2017-12-15 |     2   |      1    |     3   |
+-----+------------+---------+-----------+---------+

Все, что я хочу сделать, это echo, в php файле, значения второй таблицы, но вместо чисел я хочу повторить имена первой таблицы на их месте.

Может ли кто-нибудь научить меня, как принять этот результат?

Изменение: Когда я использую этот код:

<?php
     $sql = mysqli_query($con, "SELECT * FROM table2");
     while ($row = mysqli_fetch_array($sql)) {
        echo "<center>" . $row['date'] . " " .$row['morning']. " " .$row['afternoon']. " " .$row['evening']. "</center>";
     }
?> 

у меня есть результат

2017-12-14 1 2 1
2017-12-15 2 1 3

и я хочу это вместо этого:

2017-12-14 test teest test
2017-12-15 teest test teeest

Благодарю.

Теги:

3 ответа

0
Лучший ответ

Вы должны использовать JOIN.

запрос

 select 
  't2'.'id2',
  't2'.'date',
  'ta1'.'name' as 'morning',
  'ta2'.'name' as 'afternoon',
  'ta3'.'name' as 'evening'
from 'table2' as 't2'
join 'table1' as 'ta1'
on 'ta1'.'id1' = 't2'.'morning'
join 'table1' as 'ta2'
on 'ta2'.'id1' = 't2'.'afternoon'
join 'table1' as 'ta3'
on 'ta3'.'id1' = 't2'.'evening';

Демо-версия скрипта

  • 0
    Что означает та1, та2, та3?
  • 0
    @StavrosS: это просто alias таблицы
Показать ещё 1 комментарий
0

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

Образец:

$names = [1 => 'test', 2 => 'teest', 3 => 'teeest'];

echo $names[$secondrow["morning"]];
0

Если я правильно понимаю...

Лучше всего иметь INNODB таблицу с движком INNODB с отношением между таблицами, то есть foreign key определенным между второй таблицей и первой таблицей.

Затем вы запустите SQL-запрос в базу данных, используя отношение, которое вы получите, данные из обеих таблиц, а в части SELECT запроса вы определяете, какие столбцы должны отображаться.

SELECT atable.name, btable.* 
FROM btable
JOIN atable ON btable.name_id = atable.id;

Вот мой пример: http://sqlfiddle.com/#!9/e851e0/3

Ещё вопросы

Сообщество Overcoder
Наверх
Меню