Я получаю кучу записей из своей базы данных и перебираю их:
$sql = "SELECT * FROM driving_list_shipments WHERE id IN($allIds)";
$stmt = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
foreach($stmt as $row){
}
Теперь мой $row[]
содержит ниже:
$row["id"]; //Row id from database table
$row["temperature"]; //Values can be: 2-8, 15-25, No Temperature
$row["dgr"]; //Values can be: 0,1
$row["eq"]; //Values can be: 0,1
$row["ice"]; //Values can be: 0,1
$row["pil"]; //Values can be: 0,1
Очевидно, что вышеуказанные условия могут составлять множество различных комбинаций. Я пытаюсь выяснить, как добавить записи, которые имеют точный те же условия для их соответствующих массивов.
Пример № 1:
Если строки с номерами 10, 20 и 30 имеют $row["dgr"] = "1"
а также $row["temperature"] = "2-8"
Затем я хочу, чтобы эти записи были добавлены в массив (так как все они имеют одинаковые условия).
Я не уверен, как сделать проверку, так как я не могу просто $condition1 = $condition2
, из-за того, что есть сотни разных результатов.
Пример № 2:
if($row["dgr"] == 0 && $row["eq"] == 1){
echo $row["id"]; //Show the ids that matches above condition
}
if($row["dgr"] == 1 && $row["eq"] == 0){
echo $row["id"]; //Show the ids that matches above condition
}
if($row["dgr"] == 0 && $row["eq"] == 0){
echo $row["id"]; //Show the ids that matches above condition
}
Как вы можете видеть выше, это лишь некоторые из возможных комбинаций. Если мне придется «вручную» проверять все 5 условий и сотни различных комбинаций, это займет у меня навсегда.
Это может быть не то, что вы после, но вы могли бы использовать GROUP BY and
group_concat` в вашем запросе для достижения этого:
SELECT `temperature`,`dgr`,`eq`,`ice`,`pil`, GROUP_CONCAT(`id`) as `ids` FROM `driving_list_shipments` WHERE id IN($allIds) GROUP BY `temperature`,`dgr`,`eq`,`ice`,`pil`
Тогда вы используете explode
преобразовать идентификаторы в массив, например
explode(',', $row['ids'])
Вы можете получить их, написав запрос вместо проверки в цикле PHP.
$sql = "SELECT * FROM driving_list_shipments WHERE id IN($allIds) AND dgr='1' AND temperature='2-8'";
Или, на самом деле, я имею в виду Написать цикл, который захватит для вас правильные данные, а не перебирает все данные:
$rules = array (
array ('dgr' => '1', 'temperature'=> '2-8'),
array ('dgr' => '0', 'temperature'=> '2-8')
);
for ($rulse as $rule) {
$sql = "SELECT * FROM driving_list_shipments WHERE id IN($allIds) AND dgr='".$rule['dgr']."' AND temperature='".$rule['temperature']."'";
$stmt = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}
Этот запрос даст вам результат, идентификаторы которого соответствуют определенной температуре и dgr. Может быть, результат этого может быть запрошен. И быть назначенным на конкретную переменную.
SELECT temperature, dgr, GROUP_CONCAT(id) as ids FROM driving_list_shipments WHERE id IN($allIds) GROUP BY temperature, dgr