SQL JOIN: Как отобразить значения столбца таблицы A с тем же именем, что и столбец таблицы B? - PullRequest
0 голосов
/ 29 января 2020

У меня есть две MySQL таблицы с именем учетные записи

id username role
1  pete101  2
2  JohnnyA  1
3  Anno65   1
4  tom      1
5  koala3   2

и с именем события

id date     accountID
1  02-04-20 3
2  10-04-20 5
3  07-04-20 4
4  10-04-20 2
5  10-04-20 1

Сейчас Я хочу показать в таблице HTML все события с датой «10 -04-20» из учетных записей с ролью «2». Я использую этот запрос для него: "SELECT * FROM events JOIN accounts ON events.accountID = accounts.id WHERE events.date = '10-04-20' AND accounts.role = '2'"

while($row = mysqli_fetch_array($result)){   
    echo "<tr><td>" . $row['id'] . "</td><td>" . $row['date'] . "</td><td>" . $row['username'] . "</td><td>" . $row['accountID'] . "</td><br>"; 
}

Результат этого запроса (и PHP) следующий:

id  date     username accountID
5  10-04-20  koala3   5
1  10-04-20  pete101  1

Он показывает дважды идентификатор account таблица, но мне нужно следующее эхо:

id  date     username accountID
2  10-04-20  koala3   5
5  10-04-20  pete101  1

Итак, первый столбец - это идентификатор таблицы events , а последний столбец (accountID) - id учетных записей таблицы

Что мне нужно сделать, чтобы это исправить?

Заранее большое спасибо!

Ответы [ 2 ]

1 голос
/ 30 января 2020

Так как это помогло в комментарии, возможно, сделайте это ответом. Изменяя его с $row['colname']; на его фактическое положение в $row

Изменить исходный запрос:

while($row = mysqli_fetch_array($result)){   
    echo "<tr><td>" . $row['id'] . "</td><td>" . $row['date'] . "</td><td>" . $row['username'] . "</td><td>" . $row['accountID'] . "</td><br>"; 
}

На это:

while($row = mysqli_fetch_array($result)){   
    echo "<tr><td>" . $row[0] . "</td><td>" . $row[1] . "</td><td>" . $row[2] . "</td><td>" . $row[3] . "</td><br>"; 
}
1 голос
/ 30 января 2020

Попробуйте

CREATE TABLE accounts
    (`id` int, `username` varchar(7), `role` int)
;

INSERT INTO accounts
    (`id`, `username`, `role`)
VALUES
    (1, 'pete101', 2),
    (2, 'JohnnyA', 1),
    (3, 'Anno65', 1),
    (4, 'tom', 1),
    (5, 'koala3', 2)
;
✓

✓
CREATE TABLE events
    (`id` int,  `date` date, `accountID` varchar(10))
;

INSERT INTO events
    (`id`, `date`, `accountID`)
VALUES
    (1, '02-04-20', 3),
    (2, '10-04-20', 5),
    (3, '07-04-20', 4),
    (4, '10-04-20', 2),
    (5, '10-04-20', 1)
;
✓

✓
SELECT 
e.id,a.username,e.`date`, e.accountID
FROM events e JOIN accounts a ON e.accountID = a.id 
 WHERE e.date = '10-04-20' AND a.role = '2'
Order BY e.id
id | username | date       | accountID
-: | :------- | :--------- | :--------
 2 | koala3   | 2010-04-20 | 5        
 5 | pete101  | 2010-04-20 | 1        

дБ <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...