我產生這樣的結果的查詢:如何限制訪問基於用戶聯繫人表我查詢的行IDS
的數據按日期降序排序,然後通過時間DESC,而且共同的'markers_name'元素被分塊在一起。 (他們只在每個日期分組在一起)。
要做到這一點,我得到MAX(time)
值的列表中conditions
的(markers_id, date)
每一個組合,然後再加入該列表的行集我從本查詢得到,並使用MAX(time)
值排序:
SELECT
m.name AS markers_name,
c.time AS conditions_time,
c.date AS conditions_date,
s.name AS station_name
FROM markers m
INNER JOIN conditions c ON c.markers_id = m.id
INNER JOIN station s ON c.station_id = s.id
INNER JOIN (
SELECT
markers_id,
date,
MAX(time) AS time
FROM conditions
GROUP BY
markers_id,
date
) mx ON c.markers_id = mx.markers_id AND c.date = mx.date
ORDER BY
c.date DESC,
mx.time DESC,
m.name DESC,
c.time DESC
現在我需要限制用戶訪問某些行。
條件表具有「專用」列。如果'private'設置爲1,則只有一些人可以看到查詢行。可以看到的人包括創建條件報告的人和該人的聯繫人。條件表具有'user_id',其中包含創建條件報告的人員的ID。聯繫人從包含'user_id'和'friend_id'兩個字段的'contacts'表中獲取。我有請求信息的人的user_id。
要重申的另一種方式,我需要做的是這樣的:
- 執行上面的查詢,也請檢查是否c.private被設置爲1。
- 如果c.private設置爲1,則使用c.user_id從聯繫人表中獲取該用戶的'friend_id'。
- 如果請求信息的用戶的user_id與c.user_id匹配或c.user_id的任何朋友返回查詢行。如果沒有,請不要返回該行或返回表明行是私有的東西(例如,我可以在數據庫中使用名稱「Private」的標記名稱,例如:
如果有人有任何想法, 。很想聽到他們的聲音我這昨天一整天掙扎謝謝
非常感謝您的回覆。我只是試過這個,但是我在where子句中出現錯誤。我會在明天早上嘗試調試它,並讓你知道我找到了什麼。再次感謝。 – user418775
我的錯誤是由於在$ userid周圍沒有使用單引號造成的。我嘗試了你的第一個答案,它效果很好!感謝您提供有關如何做到這一點的詳細信息。 – user418775