Я работаю над своим первым проектом (системой управления проектами), чтобы лучше понимать PHP и MySQL. В настоящее время у меня есть 3 таблицы в моей базе данных, одна из которых содержит список всех проектов (таблица «проекты»), другая, в которой хранятся имя пользователя и пароль пользователя (таблица «пользователи»), а затем третья, небольшая таблица «разрешения», предназначенная для Отфильтруйте, какие проекты пользователь может видеть из таблицы проектов.
Третья таблица «разрешений» состоит из уникального идентификатора, а затем «user_id» и «project_id» в двух других столбцах. «User_id» ссылается на идентификатор пользователя в таблице «users», а «project_id» ссылается на идентификатор проекта в таблице проектов.
Обратите внимание, что более одного пользователя могут иметь доступ к одному проекту, поэтому в таблице проектов для этого нет только одного столбца, и я прочитал, что использование разделенных запятыми списков для нескольких имен пользователей является плохим способом. Это. Поэтому я установил внешние ключи для user_id и project_id, которые ссылаются на id каждого из них соответственно.
Теперь я не уверен, что это хороший способ настроить вещи, но мне кажется, что все в порядке.
На самом деле я хочу получить все проекты, к которым у определенного пользователя есть доступ. Так что-то вроде (но, очевидно, работает):
SELECT * FROM projects WHERE user_id = 3;
Есть ли более простой способ сделать это? Что-то связанное с командой join, но я так и не смог сделать это правильно.
Заранее спасибо!
РЕДАКТИРОВАТЬ:
Извиняюсь за двусмысленность, становится немного сложно объяснить.
По сути, я просто хочу отфильтровать, какие строки отображаются из таблицы проектов с помощью user_id в таблице пользователей (обратите внимание, что более одного пользователя могут получить доступ к проекту, поэтому я могу просто поместить столбец «user_id» в таблицу проектов и оставить из третьего стола в целом).
Мои таблицы примерно так:
проекты:
|id|project_title|project_notes|project_status|
|1 |A Project |Some Notes |Finished |
|2 |A 2nd Project|Some more... |In Progress |
пользователей:
|id|username|password|
|1 |johndoe |*********|
|2 |benhill |*********|
разрешения:
|id|user_id|project_id|
|1 |1 |2 |
|2 |2 |2 |
user_id = идентификатор из таблицы пользователей.
project_id = идентификатор из таблицы проектов.
Затем в HTML / PHP я хочу получить только те проекты, к которым у пользователя есть доступ.
К сожалению, ваш вопрос не очень ясен, но я предполагаю, что вы хотите иметь один запрос, чтобы найти все проекты, к которым у определенного пользователя есть доступ, вы можете просто объединить таблицы с идентификатором как таковой:
SELECT * from projects INNER JOIN permissions ON
projects.id = permissions.project_id WHERE
permissions.user_id = 3
Предположим, что пользователь, которого вы ищете, имеет идентификатор 3
Если у вас есть
Users (Id, Name)
Projects (Id, Name)
Permissions (UserId, ProjectId)
и вы хотите «извлечь все проекты, к которым у определенного пользователя есть доступ», и у вас есть идентификатор пользователя, хранящийся в переменной $userId
Вы можете использовать простой запрос, подобный этому:
select * from Projects pr
join Permissions pe on pr.Id = pe.ProjectId
and pe.UserId = $userId
Google вокруг для получения дополнительной информации о синтаксисе SQL и присоединений. Вот ссылка, которую я только что нашел, которая выглядит как хорошее место для начала: http://www.sitepoint.com/understanding-sql-joins-mysql-database/