亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

基于獨占值獲取結果:mysql & laravel

基于獨占值獲取結果:mysql & laravel

PHP
臨摹微笑 2022-01-23 10:53:08
由于我的詞匯量較弱,我不確定我的問題的標題是否正確,但我試圖盡可能詳細地解釋我的需求。感謝您通過。我有一張設計用來存儲活動成員的表。示意圖如下。event_id | user_id---------|---------------------1        | 231        | 323        | 233        | 323        | 67我想event_id根據提供的值進行檢索,user_id但我只想顯示event_id專門為用戶提供的值。例如,根據上表的圖表,如果我只給用戶值 = (23, 32),那么我應該只檢索事件 1,而不是 1 和 3,即使事件 3 也有上述用戶。我正在嘗試僅檢索給定用戶獨有的事件。這是我的 laravel 實現:DB::table('events_users')->whereIn('user_id', [23, 32])                         ->get();這會獲取所有具有上述用戶的事件,但我想要基于上圖的唯一具有 id 1 的事件。我當前的解決方案是在從查詢結果中將每個事件中的用戶計數與所需計數相匹配的位置之后,再編寫一層代碼。例如,如果我只搜索 2 個用戶獨占事件,那么我將根據事件中的總用戶數從結果中過濾掉事件。對不起,我的詞匯量很弱,但我正在盡力解釋。有沒有辦法通過單個查詢來實現我想要的?
查看完整描述

3 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

我認為以下解決方案也可以:


SELECT DISTINCT event_id  FROM events_users GROUP BY event_id 

HAVING GROUP_CONCAT(DISTINCT user_id ORDER BY user_id asc SEPARATOR ',')="23,32"

您可以在查詢之前對 user_id 數組進行排序和連接。


Laravel 查詢構建器方法:


$user_id_str=implode(",",[23,32]);

DB::table('events_users')

    ->selectRaw("distinct event_id")

    ->groupBy('event_id')

    ->havingRaw("GROUP_CONCAT(DISTINCT user_id ORDER BY user_id asc SEPARATOR ',')='$user_id_str'")->get();


查看完整回答
反對 回復 2022-01-23
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

一種 SQL 方法是使用基于條件聚合的過濾。我們使用事件聚合GROUP BY,然后使用HAVING子句過濾掉行:


SELECT event_id 

FROM events_users 

GROUP BY event_id 

HAVING 

  SUM(user_id = 23) -- event exists for user = 23

  AND 

  SUM(user_id = 32) -- event exists for user = 32

  AND 

  NOT SUM(user_id NOT IN (23,32)) -- no other row exists other than user 23 and 32


查看完整回答
反對 回復 2022-01-23
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

此解決方案不適用于具有相同類型的獨家成員的多個事件的情況。這是不正確的解決方案。我道歉。 Phil 的解決方案有效,因此我將其標記為解決方案。


我有適合我的解決方案。如果您認為有缺陷,請告訴我。


DB::table('events_users')

                    ->whereIn('user_id', [23, 32])

                    ->havingRaw('count(user_id) = ?', [2])

                    ->get();

這給了我只有用戶 23 和 32 的獨家活動,沒有其他成員。我假設給定的用戶和用戶數量是互斥的,因為在事件中不會有重復的用戶條目。讓我知道這是否在任何情況下都失敗了。


查看完整回答
反對 回復 2022-01-23
  • 3 回答
  • 0 關注
  • 164 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號