Сопоставление и возврат строк в php и MySQL - PullRequest
0 голосов
/ 19 января 2012

Я хотел бы получить помощь с этим. Я использую php и MySQL для создания веб-сайта. В настоящее время у меня есть 3 таблицы, я буду включать меньше в примерах. В основном у меня есть таблица пользователей, таблица групп и таблица групповой ссылки. У меня есть идентификатор пользователя из таблицы пользователей.

Как мне это сделать в php, чтобы я мог, скажем, сопоставить users-uid с grouplink-uid, получить grouplink-gid, с которым он соответствует, сопоставить grouplink-gid с groups-gid и вернуть groups-grpname? И продолжает цикл while, поэтому отображаются все имена групп, с которыми связан пользователь.

Заранее спасибо тем, кто захочет протянуть руку.

Пользователи

-------
| uid |
-------
|  1  |
-------  

группа

---------------
| gid |grpname|
---------------
|  1  | grp1  |
---------------
|  2  | grp2  |
---------------

grouplink

-------------------
| glid| uid | gid |
-------------------
|  1  |  1  |  1  |
-------------------
|  2  |  1  |  2  |
-------------------

uid - это fk для uid в пользователях, в то время как gid - это fk для gid в группах

Ответы [ 4 ]

3 голосов
/ 19 января 2012

Это простой двусторонний запрос соединения:

SELECT users.uid, groups.gid, groups.grpname
FROM users
INNER JOIN grouplink ON users.uid = grouplink.uid
INNER JOIN groups ON grouplink.gid = groups.gid

фактическое получение результата объединенного запроса ничем не отличается от запроса к одной таблице - у вас просто есть больше полей для обработки.

1 голос
/ 19 января 2012

Когда идентификатор пользователя находится в переменной $iUserId, вы можете запросить следующую строку sql:

$sSql = "SELECT groups.`grpname` FROM groups
    INNER JOIN grouplink ON groups.`gid` = grouplink.`gid`
    WHERE grouplink.`uid` = '" . intval($iUserId) . "'";
$rRes = mysql_query($sSql);
$aGroups = array();
while (($aRow = mysql_fetch_array($rRes)) !== false) {
   $aGroups[] = $aRow['grpname'];
}

Теперь все группы, связанные с пользователем, находятся в массиве $aGroups.

1 голос
/ 19 января 2012

Вот один из способов:

SELECT users.uid, groups.gid, groups.grpname
FROM users u, groups g, grouplink gl
WHERE g.id = gl.gid
AND gl.uid = u.uid
1 голос
/ 19 января 2012

SQL-запрос, который даст вам то, что вы ищете, выглядит примерно так (при условии отсутствия нулевых значений в таблице grouplink):

SELECT u.uid, g.gid, g.grpname
FROM users u
JOIN grouplink gl ON u.uid = gl.uid
JOIN groups g ON gl.gid = g.gid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...