Step 1
-------
array_intersect_key($array, array_flip(array_keys(array_unique(array_column($array, 'id')))))
array(4) {
[0]=>
array(3) {
["id"]=>
int(1)
["date"]=>
string(10) "12.01.2020"
["name"]=>
string(5) "test1"
}
[1]=>
array(3) {
["id"]=>
int(2)
["date"]=>
string(10) "02.05.2020"
["name"]=>
string(5) "test2"
}
[2]=>
array(3) {
["id"]=>
int(4)
["date"]=>
string(10) "08.03.2020"
["name"]=>
string(5) "test4"
}
[5]=>
array(3) {
["id"]=>
int(3)
["date"]=>
string(10) "06.06.2020"
["name"]=>
string(5) "test3"
}
}
Step 2
-------
$temp = $array;
sort($temp, SORT_STRING);
array_multisort(array_column($array, 'date'), SORT_ASC, $temp);array(6) {
[0]=>
array(3) {
["id"]=>
int(2)
["date"]=>
string(10) "02.05.2020"
["name"]=>
string(5) "test2"
}
[1]=>
array(3) {
["id"]=>
int(3)
["date"]=>
string(10) "06.06.2020"
["name"]=>
string(5) "test3"
}
[2]=>
array(3) {
["id"]=>
int(4)
["date"]=>
string(10) "08.03.2020"
["name"]=>
string(5) "test4"
}
[3]=>
array(3) {
["id"]=>
int(2)
["date"]=>
string(10) "11.11.2020"
["name"]=>
string(5) "test4"
}
[4]=>
array(3) {
["id"]=>
int(1)
["date"]=>
string(10) "12.01.2020"
["name"]=>
string(5) "test1"
}
[5]=>
array(3) {
["id"]=>
int(1)
["date"]=>
string(10) "22.01.2020"
["name"]=>
string(5) "test1"
}
}
Step 3
-------
Searching id = 2
array_intersect_key($array, array_flip(array_keys(array_column($array, 'id'), 2)))
array(2) {
[1]=>
array(3) {
["id"]=>
int(2)
["date"]=>
string(10) "02.05.2020"
["name"]=>
string(5) "test2"
}
[4]=>
array(3) {
["id"]=>
int(2)
["date"]=>
string(10) "11.11.2020"
["name"]=>
string(5) "test4"
}
}
Step 4
-------
array_column(array_intersect_key($array, array_flip(array_keys(array_unique(array_column($array, 'id'))))), 'id', 'name')
array(4) {
["test1"]=>
int(1)
["test2"]=>
int(2)
["test4"]=>
int(4)
["test3"]=>
int(3)
}
Step 5
-------
- Считаем количество тэгов
- Выбираем из связывающей таблицы товары с таким числом записей
- Выбираем эти товары
- Выбираем из результата id и name
SELECT g.id as id, g.name as name FROM
(SELECT g.id, g.name, gt.tag_id, gt.goods_id FROM goods g, goods_tags gt,
(SELECT count(gt.tag_id) FROM gt WHERE gt.goods_id = g.id) as gt_count,
(SELECT count(*) FROM tags) as tags_count WHERE g.id = gt.goods_id AND
(SELECT count(gt.tag_id) FROM gt WHERE gt.goods_id = g.id) = (SELECT count(*) FROM tags));
Step 6
-------
SELECT DISTINCT department_id FROM evaluations WHERE gender = true AND value > 5;