Есть таблица в mysql. Она имеет если упрощенно такой вид: ------------------- | callid | status | ------------------- | 1 | an | ------------------- | 1 | an | ------------------- | 1 | no an | ------------------- | 2 | an | ------------------- | 2 | no an | ------------------- | 3 | no an | ------------------- Я получаю из него 1000 записей. Как исключить из результата все записи со имеющее в status "no an" если была хоть одна запись с таким же callid но со status "an" Я решил приблизительно так: Но чувствую решил я или неправильно или не оптимально или и то и другое PHP: <?php // Данные для отладки $data[0] = array("agent"=>"a1", "disposition"=>"ANSWERED", "callid"=>"12"); $data[1] = array("agent"=>"a2", "disposition"=>"NO ANSWER", "callid"=>"12"); $data[2] = array("agent"=>"a3", "disposition"=>"NO ANSWER", "callid"=>"12"); $data[3] = array("agent"=>"a4", "disposition"=>"NO ANSWER", "callid"=>"13"); $data[4] = array("agent"=>"a5", "disposition"=>"ANSWERED", "callid"=>"13"); $data[5] = array("agent"=>"a6", "disposition"=>"BUSY", "callid"=>"13"); $data[6] = array("agent"=>"a7", "disposition"=>"NO ANSWER", "callid"=>"14"); // Отладка print ("<pre>"); print_r($data); print ("</pre>"); $for_del = array(); for ($i = 0; $i < count($data); $i++) { if ($data[$i]['disposition'] == "ANSWERED") { for ($j = 0; $j < count($data); $j++) { if ($data[$j]['callid'] == $data[$i]['callid'] AND $data[$j]['disposition'] == "NO ANSWER") { $for_del[] = $j; } } } } foreach ($for_del as $key => $value){ unset($data[$value]); } // Отладка print ("<pre>"); print_r($data); print ("</pre>"); echo json_encode($data); ?>
сразу выбрать только те записи которые нужно, а не выбирать все а потом вручную их чистить. В данном случае зависит от сути задачи. Нужно выбрать только те где есть хоть один callid со status "an". остальное шелуха. выбираем их, группируем по callid и получаем список callid который нас интересует.
Перефразирую задачу нужно выбирать все записи кроме тех у которых status равно "no an" только в том случае если есть с таким же callid запись со status равном "an" --- Добавлено --- Можно с этого места по подробней