Есть одно поле. В это поле записываються данные через запятую. Ну например "софт, игры, железо". Надо что бы каждое слово записывалось в БД как новая отдельная запись а не сразу все слова в одну запись. Так понимаю надо реализовывать через регулярное выражение... :?:
topas Вроде смысл ухватил, но реализовать как... Нужно написать цикл который инсертит все существующие значения из массива... Встал в тупик, втыкаю в мануалы... Kreker Смотрел. Не понил как это работает. Вставил в инсерт, после чего инсерт перестал работать.Есть какие нить примеры? [sql]"INSERT INTO first (one, two) FIELDS TERMINATED BY ',' VALUES (%s, %s)"[/sql] ну первое значение это допустим "1,2,3"
Тебе как раз подобная комбинация прокатит В конце топика смотри, дешево и сердито http://sqlinfo.ru/forum/viewtopic.php?id=363
Проблему так и не решил есчо. Взял вордпресс и вскрыл его скальпелем. Вот функция которая добавляет тэги кажись) PHP: // Add tags. if (count($tags) > 0) { $post_tags = array(); foreach ($tags as $tag) { $slug = sanitize_term_field('slug', $tag, 0, 'post_tag', 'db'); $tag_obj = get_term_by('slug', $slug, 'post_tag'); $tag_id = 0; if ( ! empty($tag_obj) ) $tag_id = $tag_obj->term_id; if ( $tag_id == 0 ) { $tag = $wpdb->escape($tag); $tag_id = wp_insert_term($tag, 'post_tag'); $tag_id = $tag_id['term_id']; } $post_tags[] = $tag_id; } wp_set_post_tags($post_id, $post_tags); } } Что то где то я невъезжаю(
kilroy PHP: <?php $string = "a,b,c,d,e,f"; $tags = explode (",", $string); for ($i = 0; $i < sizeof ($tags); $i++){ print "Я <b>".$tags[$i]."</b><br />"; } print_r ($tags); ?>
Спасибо, как юзать эксплойд я уже сам догадалсо, хотя может чего то и не уловил. Проблема то вот в чом, в запросе БД на ИНСЕРТ, что бы инсертил каждое слово как отдельную запись.
Ну и что там не то. Твою строку "софт, игры, железо" приводишь к виду "('софт'), ('игры'), ('железо')", не проблема думаю. Искейпишь ее. Передаешь параметром хранимой процедуре. Дальше как в ссылке.
И в чем проблема?.. PHP: <?php $Words = array ('я', 'люблю', 'php'); for ($i = 0; $i < count ($Words); $i++){ mysql_query ("INSERT into `table` VALUES ('".$Words[$i]."');") or die (mysql_error()); } echo 'Данные добавлены'; ?>
Elkaz - истинный телепат)) Я когда начал первый раз писать запрос, то у меня впринцепе было почти так же, только не работало, поэтому я подумал что вообще неправельно пишу запрос, а оказывается с синтаксисом немного переборщил, сэнькс.
Не эффективно. Если будет 1 000 слов, то 1 000 раз будет выполняться запрос на INSERT по 1 записи. Один запрос на INSERT 1 000 записей более правильно. Если возникнет вопрос почему, ответ - идите на мануал. Там это подробно расписано. В принципе можно и не через процедуру, хотя IMHO нефиг SQL-коду в PHP-скриптах делать. Что-то вроде $words = "('софт'), ('игры'), ('железо')"; $words = mysql_escape_string($words); mysql_query ("INSERT into `table` VALUES '$words';") or die (mysql_error());
Спс. Сделал как показал Elkaz. Слов там 1000 точно не будет и не предвитицо. С эскейпом не разобрался... После эскейпа строка принимает вид типа ('/софт'/), ('/игры'/), ('/железо'/), если не ошибаюсь, каким образом потом она инсертиться незнаю, чутка почитал про эскейп и все равно не воткнул. *Щас времени не особо много для изучения мускуля...дел куча...жопа короче, как обычно)
kilroy Все-таки пример EugeneTM лучше. Я свой привел лишь для наглядности. С его примером вы используете только один запрос, а в моем примере - целую кучу. Это действительно не рационально. Попробуйте так: PHP: <?php $words = "('текст1'), ('текст2')"; mysql_query ("INSERT into `table` VALUES ".$words) or die (mysql_error()); ?> Все-таки производительность и оптимизация - вещи хорошие