SELECT i.name, a.name, v2.value
FROM `items` i
JOIN `item_attribute` ia ON ia.item_id = i.id AND ia.attribute_id = :aid
JOIN `values` v ON v.attribute_id = ia.attribute_id
LEFT JOIN `item_attribute` ia2 ON ia.item_id = i.id
LEFT JOIN `values` v2 ON v.attribute_id = ia2.attribute_id
LEFT JOIN `attributes` a ON a.id = ia2.attribute_id
WHERE v.value > 10
-- Запрос на выборку всех квартир, свободных в определенный промежуток дат
SELECT * FROM Apartment a
WHERE NOT EXISTS (
SELECT 1 FROM Apartment_Dates
WHERE apartment_id = a.id AND
(arrival_time BETWEEN ? AND ? OR departure_time BETWEEN ? AND ? OR ? BETWEEN arrival_time AND departure_time)
~ ^.*\/([^\/]*\.[^\/]*)$
$a = [
'key1' => [1, 2, 3],
'key2' => [9, 8, 7, 0],
'key5' => 'value5',
2 => 'something',
'key4' => 89
];
$b = array_reverse(array_keys($a));
//если бы все ключи были строковыми, то можно было бы так
//$c = array_merge(array_flip($b), $a);
//но если хоть один ключ числовой, то так
$c = [];
foreach ($b as $k) {
$c[$k] = $a[$k];
}
print_r($c);
/*результат
Array
(
[key4] => 89
[2] => something
[key5] => value5
[key2] => Array
(
[0] => 9
[1] => 8
[2] => 7
[3] => 0
)
[key1] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
)
*/