Добрый день. Есть строка в БД которая содержит числовые значения (массив). Как прочесть этот массив и как его лучше писать в БД.
Подробнее: Есть список специалистов в БД которые оказывают несколько услуг. В БД у специалистов они(услуги) записаны в виде своих ID в одной строке как
a:3:{i:0;i:1;i:1;i:2;i:2;i:30;}
Далее нужно вывести список специалистов и список оказываемых ими услуг в числовом виде. Использовал для чтения функцию
unserialize( $value['uslygi'] );
Мне кажется, что я запутался в синтаксисе кода, а возможно это можно сделать как то проще.
$query = " SELECT * FROM t_specialist " ;
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
$myarray = array();
$n = mysql_num_rows($result);
for($i = 0; $i < $n; $i++)
{
$myarray[] = mysql_fetch_array($result);
}
foreach($myarray as $value){
$array = unserialize( $value['uslygi'] );
echo "<br>Специалист: ".$value['name']." Оказывает услуги: ". ТУТ НУЖНО ВЫВЕСТИ ID ОКАЗЫВАЕМЫХ УСЛУГ;
}
?>
Ответ на вопрос как перевести массив в строку - функция implode
echo implode(',', $array);
Подобная сериализация обьекта языка программирования в реляционную базу данных в вашей задаче является причиной многих проблем и ошибок. Правильная запись в базу подобных значений должна сопровождаться отдельной таблицей и связью один ко многим. Обязательно создайте поле id в t_specialist, если его нет!
Удалите из таблицы t_specialist поле uslugi, и создайте новую таблицу t_specialist_services, которая будет содержать следующую структуру:
Заполните ее. После чего делайте запрос с применением JOIN
SELECT ts.id, GROUP_CONCAT(service_id) services_id FROM t_specialist ts JOIN t_specialist_services tss ON ts.id = tss.specialist_id GROUP BY tss.id
Или
SELECT ts.id, service_id FROM t_specialist ts JOIN t_specialist_services tss ON ts.id = tss.specialist_id
В первом случае, в каждой строке вы получите specialist_id и список услуг через запятую в поле services_id, а в последнем случае вы получаете множественные записи в виде номера специалиста и номер услуги, но вы можете данные сгурпировать их на своей стороне и удобно использовать. Например, вот так:
$services = [];
//$data данные из mysql
foreach ($data as $item) {
$services[$item->id][] = $item->service_id;
}
P.S Прекратите использовать мамонта в виде расширения MYSQL, пора переходить на новое! В лучшем случае PDO или Mysqli
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Наткнулся на простой пост с реализацией простой админкиyii2 установлен advanced
Есть HTML код и таблица (category) из 15 brand и idКак грамотно вывести данные в теги li где li=сектор 1? Каждые 5 наименований относятся разным разделом
ЗдравствуйтеДелаю Flex проект на Flash Builder с php типом сервера