Pobieram kilka rekordów z mojej bazy danych i pętli przez nich:

$sql = "SELECT * FROM driving_list_shipments WHERE id IN($allIds)";
$stmt = $dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
foreach($stmt as $row){ 

}       

Teraz mój $row[] zawiera poniżej:

$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

Oczywiście powyżej warunki mogą mieć wiele różnych kombinacji. Próbuję dowiedzieć się, jak dodać rekordy, które mają dokładnie dokładnie te same warunki do ich odpowiednich tablic.

Przykład # 1: Jeśli wiersz ID 10, 20 i 30 mają $row["dgr"] = "1" i $row["temperature"] = "2-8", a następnie chcę dodać te rekordy do tablicy (ponieważ wszystkie mają identyczne warunki).

Nie jestem pewien, jak sprawdzić, ponieważ nie mogę po prostu $condition1 = $condition2, ze względu na fakt, że istnieją setki różnych wyników.

Przykład # 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 
}

Jak widać powyżej, są to tylko niektóre z możliwych kombinacji. Jeśli muszę "ręcznie" sprawdzić wszystkie 5 warunków i setki różnych kombinacji, zabierze mnie na zawsze.

1
oliverbj 3 czerwiec 2018, 14:58

3 odpowiedzi

Najlepsza odpowiedź

To może nie być tym, czym jesteś, ale możesz użyć GROUP BY and group_concat` w zapytaniu, aby to osiągnąć:

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`

Następnie używasz explode, aby sprawić, aby identyfikatory w tablicy e.g.

explode(',', $row['ids'])
1
Rwd 3 czerwiec 2018, 12:20

Możesz je zdobyć, pisząc zapytanie zamiast sprawdzać je w pętli PHP.

$sql = "SELECT * FROM driving_list_shipments WHERE id IN($allIds) AND dgr='1' AND temperature='2-8'";

Lub faktycznie miał na myśli pętlę, która chwyta dla Ciebie poprawne dane zamiast pętli przez wszystkie dane:

$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
Masih IT 3 czerwiec 2018, 12:13

Ta zapytanie daje ci wynikiem, którego identyfikator są dopasowane do określonej temperatury i DGR. Może wynik tego może zostać zapytań. I należy przypisać do określonej zmiennej.

SELECT temperature, dgr, GROUP_CONCAT(id) as ids FROM driving_list_shipments WHERE id IN($allIds) GROUP BY temperature, dgr
0
Leroy 3 czerwiec 2018, 12:21