0

I have an array called assetIDs as below

$assetIDs = Collection {#505 ▼
  #items: array:2 [▼
    0 => 4
    1 => 7
  ]
}

and I have the data in the table as below shown

data

and I'm doing query on the above table using this

$supplier_id = SupplierAsset::whereIn('asset_id',$asset_ids)->pluck('supplier_id');

and result for the above query is below

Collection {#510 ▼
  #items: array:3 [▼
    0 => 1
    1 => 1
    2 => 2
  ]
}

here whereIn is returning all the possible rows which satisfies the condition. Actually I need to get the result as like which supplier_id has both the values of assetIDs array.In my table supplier_id=1 has the both values 4 and 7 Just like below collection.

Collection {#510 ▼
  #items: array:3 [▼
    0 => 1
    1 => 1
  ]
}

Can anybody suggest me the solution for this please?

2
  • I have the answer in mysql but i don't know laravel, you are mixing 2 queries : - first you want to get which supplier_id having 2 different values - Second you want to display it Commented Nov 14, 2017 at 9:16
  • @Jean Doux: Okay can you help me with mysql query please ? Commented Nov 14, 2017 at 9:19

2 Answers 2

4

You can try:

$supplier_id = SupplierAsset::whereIn('asset_id',$asset_ids)
               ->groupBy('supplier_id')
               ->havingRaw('count(distinct asset_id) = ' . count($assetIDs))
               ->pluck('supplier_id');
Sign up to request clarification or add additional context in comments.

2 Comments

I've tried this already. It excludes the repeated values that's it .
Without goupBy it returns only one supplier_id. In your case it has no difference, but if you have large data it goes to error.
0

Here is the mysql you should do :

1- get all the id who have more than 1 supplier_id :

SELECT supplier_id, Count(distinct asset_id) as dist_asst
 FROM Table
 GROUP BY supplier_id
 HAVING dist_asst > 1

2- then doing a join :

SELECT t1.supplier_id
FROM Table t1
INNER JOIN (SELECT supplier_id, Count(distinct asset_id) as dist_asst
     FROM Table
     GROUP BY supplier_id
     HAVING dist_asst > 1) t2 on t2.supplier_id = t1.supplier_id

3 Comments

let me check these two queries
Your queries are returning all the supplier IDs but this query works for me SELECT supplier_id FROM supplier_assets WHERE asset_id IN ('4', '7') GROUP BY supplier_id HAVING COUNT(*) = But when i convert this into laravel its returning null :(
What is the result of the 1st query ?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.