Проблемы с фильтрацией информации в реляционных базах данных в MySQL / Stack Overflow

Я работаю над своим первым проектом (системой управления проектами), чтобы лучше понимать 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 я хочу получить только те проекты, к которым у пользователя есть доступ.

0

Решение

К сожалению, ваш вопрос не очень ясен, но я предполагаю, что вы хотите иметь один запрос, чтобы найти все проекты, к которым у определенного пользователя есть доступ, вы можете просто объединить таблицы с идентификатором как таковой:

SELECT * from projects INNER JOIN permissions ON
projects.id = permissions.project_id WHERE
permissions.user_id = 3

Предположим, что пользователь, которого вы ищете, имеет идентификатор 3

0

Другие решения

Если у вас есть

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/

0

По вопросам рекламы [email protected]