PHP SQL LEFT ПРИСОЕДИНЯЙТЕСЬ к нескольким значениям - PullRequest
0 голосов
/ 01 ноября 2018

Я немного поиграл и попытался найти решение, но немного застрял.

У меня есть таблица «собраний» с 2 столбцами, содержащая идентификатор «участников», которые мне нужны, чтобы сведения об участниках отображались в моем списке собраний.

Я пробовал это, но это не работает ...

$q = "SELECT (meetings.id) AS meetings_id, meetings.columnA, meetings.ColumnB, (members.id) AS members_id, members.first, members.last FROM meetings **LEFT JOIN members ON meetings.columnA = members.id AND meetings.columnB = members.id**";
$r = mysqli_query($dbc, $q);
while($row = mysqli_fetch_assoc($r)) { }

Я могу заставить его работать, только если я присоединяюсь только к одному значению, или 'columnA' или columnB ', но это, очевидно, только извлекало данные для одного члена.

Хотя этот способ работает, но не идеален ...

$q = "SELECT * FROM meetings";
$r = mysqli_query($dbc, $q);
while($row = mysqli_fetch_assoc($r)) { 
    $qm = "SELECT * FROM members WHERE id = '$row[columnA]'";
    $rm = mysqli_query($dbc, $qm);
    while($rowm = mysqli_fetch_assoc($rm)) {
        if  ($row['columnA'] == $rowm['id']) { echo $rowm['first']; }
    }
    $qm = "SELECT * FROM members WHERE id = '$row[columnB]'";
    $rm = mysqli_query($dbc, $qm);
    while($rowm = mysqli_fetch_assoc($rm)) { 
        if  ($row['columnB'] == $rowm['id']) { echo $rowm['first']; }
    }
}

Есть ли способ заставить JOIN работать или лучше, так что мне просто нужно сделать один запрос?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Я думаю, вы просто хотите два left join с.

SELECT m.id AS meetings_id, m.columnA, m.ColumnB,
       me1.id AS members_id, me1.first, me1.last,
       me2.id AS members_id, me2.first, me2.last
FROM meetings m LEFT JOIN 
     members me1
     ON m.columnA = me1.id LEFT JOIN
     members me2
     ON me.columnB = me2.id;
0 голосов
/ 01 ноября 2018

Попробуйте это ::

SELECT 
meetings.id AS meetings_id, 
meetings.columnA, 
meetings.ColumnB, 
members.id AS members_id, 
CONCAT(m1.first,' ',m1.last) as  columnA_Member
CONCAT(m2.first,' ',m2.last) as  columnB_Member
FROM 
    meetings 
INNER JOIN 
    members as m1 ON meetings.columnA = m1.id
INNER JOIN 
    members as m2 ON meetings.columnB = m2.id
...