Я вроде как в тупике.
У меня есть таблица элементов с полями: ID, заголовок, create_by, группа .
У меня также есть другая таблица групп с полями: ID, create_by, group_name
и окончательная таблица пользователей с полями: ID, имя пользователя, пароль и т. д. .
Идея состоит в том, что этот пользователь может видеть только элементы, созданные вошедшим в систему пользователем, или элементы, в которых зарегистрированный пользователь является частью группы пользователей элемента.
Каждый пользователь может входить в неопределенное количество групп, и каждая группа может содержать неопределенное количество пользователей.
Единственный способ на данный момент, когда я могу думать об этом, - иметь отдельную таблицу для каждого пользователя (перечисляя все группы, членами которых они являются).
Затем я сначала ищу в таблице предметов предметы, созданные вошедшим в систему пользователем.
Во-вторых, выполните поиск в таблице «групп» этого пользователя, чтобы найти идентификаторы каждой группы, к которой он принадлежит, а затем снова рекурсивно выполните поиск в таблице элементов и загрузите каждый элемент, где текущий найденный идентификатор_группы соответствует идентификатору группы элемента.
Я знаю, что это будет работать, если правильно кодировать для небольшого числа элементов, групп и / или пользователей, но я подозреваю, что каждая страница будет загружаться / обрабатывать большие таблицы. Также кажется довольно грязным иметь новую таблицу для каждого пользователя, учитывая, что у вас могут быть тысячи пользователей и, следовательно, тысячи таблиц.
Я подозреваю, что объединение таблиц может обеспечить решение, но я не очень понимаю, как в данный момент. Если это так, я очень рад переименовать поля таблицы, чтобы добиться этого.
Мой текущий код для получения предметов таков (я знаю, что это, вероятно, не идеально):
$query = "SELECT * FROM items WHERE user_id=:u_id";
$stmt = $conn->prepare($query);
$stmt->execute(array(':u_id'=>$_SESSION['u_id']));
$exist = '<option></option>';
while( $uRow = $stmt->fetch() ) {
$exist .= '<option value="'.$uRow['id'].'">'.$uRow['title'].'</option>';
}
$user_groups_tbl = "user_groups_".$_SESSION['u_id'];
$query1 = "SELECT * FROM $user_groups_tbl";
$query2 = "SELECT * FROM items WHERE group_id=:group";
$stmt1 = $conn->prepare($query1);
$stmt2 = $conn->prepare($query2);
$stmt1->execute();
while( $gRow = $stmt1->fetch() ) {
$stmt2->execute(array(':group'=>$gRow['group_id']));
while( $row = $stmt2->fetch() ) {
if( $row['user_id'] !== $_SESSION['u_id'] ) {
$exist .= '<option value="'.$uRow['id'].'">'.$uRow['title'].'</option>';
}
}
}
return $exist;
Я надеюсь, что мои потребности и намерения ясны. Любая помощь будет оценена.