匿名使用者
從您的問題來看,我相信您當前的表結構如下:table: user table: project table: shared
id | email | | id | user_id | content | | id | user_id | project_id
1 | [email protected] | | 1 | 1 | project for james | | 9 | 1 | 5
2 | [email protected] | | 2 | 1 | some other project for james | | 10 | 3 | 5
3 | [email protected] | | 3 | 2 | project for hannah | | 11 | 1 | 8
| | | 4 | 2 | a new project for hannah | | 12 | 2 | 8
| | | 5 | 2 | hannah's pride and joy | |
| | | 6 | 3 | lucy cracking down | |
| | | 7 | 3 | lucy's second project | |
| | | 8 | 3 | lucy's public stuff | |
示例: project.id, project.user_id as owner_id, shared.user_id as shared_id, project.content
from project
left join shared
on project.id = shared.project_id
and project.user_id <> ?
where project.user_id = ?
or shared.user_id = ?;
注意:。
此sql語句與問題中的sql語句之間的主要區別是and project.user_id <> ?
如果子句中沒有該條件,您將為該使用者的每個共享專案獲得重覆記錄。即。如果使用者已經與20個使用者共享了專案,那麼將有20個重複。
這是預期的行為,正如這裡所解釋的:php while語句回顯重複項$sql = "
select project.id, project.user_id as owner_id, shared.user_id as shared_id, project.content
from project
left join shared
on project.id = shared.project_id
and project.user_id <> ?
where project.user_id = ?
or shared.user_id = ?
$query = $mysqli->prepare($sql);
$query->bind_param("iii", $user_id, $user_id, $user_id);
$query->execute();
我建議更新表結構,使您有三個表(有效地:,和表充當兩個實體(codeusers/code>和table: user table: project table: project_user
id | email | | id | content | | id | user_id | project_id | role
1 | [email protected] | | 1 | project for james | | 1 | 1 | 1 | 1
2 | [email protected] | | 2 | some other project for james | | 2 | 1 | 2 | 1
3 | [email protected] | | 3 | project for hannah | | 3 | 2 | 3 | 1
| | | 4 | a new project for hannah | | 4 | 2 | 4 | 1
| | | 5 | hannah's pride and joy | | 5 | 2 | 5 | 1
| | | 6 | lucy cracking down | | 6 | 3 | 6 | 1
| | | 7 | lucy's second project | | 7 | 3 | 7 | 1
| | | 8 | lucy's public stuff | | 8 | 3 | 8 | 1
| | | | | | 9 | 1 | 5 | 2
| | | | | | 10 | 3 | 5 | 2
| | | | | | 11 | 1 | 8 | 2
| | | | | | 12 | 2 | 8 | 2
示例: project.id, project_user.user_id, project_user.role, project.content
from project
join project_user
on project_user.project_id = project.id
where project_user.user_id = ?;$sql = "
select project.id, project_user.user_id, project_user.role, project.content
from project
join project_user
on project_user.project_id = project.id
where project_user.user_id = ?
$query = $mysqli->prepare($sql);
$query->bind_param("i", $user_id);
$query->execute();
mysql物理id mysql物理結構
mysql是通過檔案系統對資料和索引進行儲存的。mysql從物理結構上可以分為日誌檔案和資料索引檔案。mysql在linux中的資料索引檔案和日誌檔案都在 var lib mysql目錄下。日誌檔案採用順序io方式儲存 資料檔案採用隨機io方式儲存。首先可以檢視mysql的檔案在linux中的那個目...
mysql 簡介 id MySQL日誌簡介
mysql中的日誌主要分為以下幾種 查詢日誌 慢查詢日誌 錯誤日誌 二進位制日誌 中繼日誌 事務日誌 說明 支援本文實驗使用的linux系統是centos7版本,使用的資料庫是base源自帶的mariadb,資料庫使用的儲存引擎使用預設的innodb 1 查詢日誌 記錄查詢語句 日誌儲存位置 日誌的...
mysql 排序id mysql怎麼按特定id排序
mysql如何按特定id排序 mysql如何按特定id排序 set foreign key checks 0 table structure for p drop table if exists p create table p id int 11 not null auto increment,n...