Here is the solution. I hope.
<?php require_once 'ФАЙЛ_ПОДКЛЮЧЕНИЯ_К_БД.php'; //подключение к БД //$connection - это переменная с подключением. У вас, возможно, другая. //Получаем и упорядочиваем данные из БД $query = "SELECT prod.id, prod.id_specz FROM prod"; $result = $connection->query($query); if (!$result) {die($connection->error);}; $new_arr=[]; //массив с уже отстортированными данными while ($myrow = $result->fetch_array(MYSQLI_ASSOC)) { $id_specz=$myrow['id_specz']; if (iconv_strlen($id_specz)>1) { $d=explode(',', $id_specz); //режем строку по запятой sort($d); //спортируем знаечения по возрастанию $id_specz=implode(',', $d); //соединяем в строку } $new_arr[$myrow['id']]=$id_specz; }; unset($result); //удаляем ненужное //Теперь обновим БД. Используем транзакцию, чтобы гарантировать запись. //Тут я использую одну для всей работы. Но если база большая, то лучше разбить на несколько частей и использовать подготовленные выражения (погуглите) $connection->autocommit(false); foreach ($new_arr as $key => $value) { $query = "UPDATE prod SET id_specz = '$value' WHERE id = '$key' LIMIT 1"; $result = $connection->query($query); if (!$result) {die($connection->error);}; } if (!$connection->commit()) {die($connection->error);}; //Теперь у нас в БД всё упорядочено и приведено к единому виду. Можно с ними работать нормально. $want_to_find='1,2'; //ищем такую строку $query = "SELECT * FROM prod WHERE prod.id_specz = '$want_to_find'"; $result = $connection->query($query); if (!$result) {die($connection->error);}; while ($myrow = $result->fetch_array(MYSQLI_ASSOC)) { echo $myrow['id'].'<br>'; }; ?>
If you need to search for all the options (i.e. if you want to find all the records where there are 2 - for example, 1,2,3 or 1,2), then use
$query = "SELECT * FROM prod WHERE prod.id_specz SOUNDS LIKE '$want_to_find'";
Then you can not lead to a single view. But better still lead.
mysql_*are outdated. You have problems with the types of cells in the table. - ilyaplot