sql — если динамические переменные идентичны

Я получаю кучу записей из своей базы данных и перебираю их:

$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 условий и сотни различных комбинаций, это займет у меня навсегда.

1

Решение

Это может быть не то, что вы после, но вы могли бы использовать GROUP BY andgroup_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'])
1

Другие решения

Вы можете получить их, написав запрос вместо проверки в цикле 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);
}
0

Этот запрос даст вам результат, идентификаторы которого соответствуют определенной температуре и dgr. Может быть, результат этого может быть запрошен. И быть назначенным на конкретную переменную.

SELECT temperature, dgr, GROUP_CONCAT(id) as ids FROM driving_list_shipments WHERE id IN($allIds) GROUP BY temperature, dgr
0
По вопросам рекламы [email protected]