|
Stasovsky ↓
|
 |
|
31 Август, 2010, 04:29:30
|
НЕ ХУЕТА!
ХУЕТА!
|
Сенсей XD
Группа: Джедаи Карма: 54
Сообщений: 3654 Сила слова: 1.48
|
в общем я сделал все криво, но, кажись, работает...
public function add_tags ($tags, $post_id)
{
$tags_arr = preg_split('/\s*,\s*/', $tags);
$this-> db-> query("delete from ?t where ?c=?i", array("posts_tags", "post_id", $post_id));
foreach ($tags_arr as $row) {
if ($row) {
$tag_id = $this-> db-> query("select ?c from ?t where ?c=?", array("id", "tags", "tag_translate", $this-> translate_tags($row)), "el");
if (! $tag_id) {
$tag_id = $this-> db-> query("insert into ?t (?c, ?c) values (?, ?)", array("tags", "tag_name", "tag_translate", $row, $this-> translate_tags($row)), "id");
}
$this-> db-> query("replace ?t (?c, ?c) values (?i, ?i)", array("posts_tags", "post_id", "tag_id", $post_id, $tag_id));
}
}
}
|
|
|
|
|
Записан
|
|
|
|
|
Givi ↓
|
 |
|
31 Август, 2010, 06:00:28 , спустя 1 час 30 минут 58 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 42
Сообщений: 2305 Сила слова: 1.82
|
Stasovsky, єєє, а с хуя у тебя:
1. В любом случае будет replace (и просто и после инсерта тоже)? Херня получается.
2. Какого члена у тебя запросы в цикле делают?! Незя такую какую мутить, кроме исключительных случаев.
Ты бы лучше на словах объяснил задачу, а мы попробуем тебе выдать алгоритм обработки (который ты уже сам будешь реализовывать).
|
|
|
|
|
Записан
|
Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь. Если человек дурак, то... чур это не я!
|
|
|
|
Stasovsky ↓
|
 |
|
31 Август, 2010, 07:26:42 , спустя 1 час 26 минут 14 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Сенсей XD
Группа: Джедаи Карма: 54
Сообщений: 3654 Сила слова: 1.48
|
в цикле, потому что у меня строка тегов разбивается на массив...
я ж объяснял)) теги мне нуна сделать))
есть таблица tags(id, tag_name, tag_translate) и есть таблица связки posts_tags(post_id, tag_id) ну и табица posts, в которой id и прочее))
так вот... пришла строка тегов через запятую, разбиваю ее в массив... в tags фигачим их с переводом (tag_translate) и без повторений, в posts_tags фигачим связку по id тега и поста...
вот у меня и получилась такая хрень, которую вы видели выше))
|
|
|
|
|
Записан
|
|
|
|
|
Givi ↓
|
 |
|
31 Август, 2010, 10:41:13 , спустя 3 часа 14 минут 31 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 42
Сообщений: 2305 Сила слова: 1.82
|
Stasovsky, INSERT INTO `table (`field1`,`field2`) VALUES("тег раз","какой-то_АйДи")("тег два","какой-то_АйДи")("тег три","какой-то_АйДи");
так вот последнюю часть и следует формировать форичем и потом выполнить один запрос. Но не пихать запросы в форич.
|
|
|
|
|
Записан
|
Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь. Если человек дурак, то... чур это не я!
|
|
|
|
Stasovsky ↓
|
 |
|
31 Август, 2010, 10:43:52 , спустя 2 минуты 39 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Сенсей XD
Группа: Джедаи Карма: 54
Сообщений: 3654 Сила слова: 1.48
|
ага, ясно))
|
|
|
|
|
Записан
|
|
|
|
|
artoodetoo ↓
|
 |
|
01 Сентябрь, 2010, 07:45:33 , спустя 9 часов 1 минуту 41 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
с особым цинизмом
Группа: в ухо Карма: 124
Сообщений: 3805 Сила слова: 3.26
|
а если идентификатор тега используется в других таблицах, а мы захотим тег переименовать, то нам все строки в других таблицах апдейтить надо??
интересный подход :) точно так же тебе может захотеться перенумеровать айди :)
чисто гипотетически первичные ключи конечно можно переделывать, используя каскадные обновления.
ок, мне то пофигу. можно с лишним полем и индексом. можно через ON DUPLICATE. как-то долго мусолите тему:
DROP TABLE IF EXISTS `tags`;
CREATE TABLE `tags` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tag_name` varchar(20) NOT NULL,
`tag_translate` varchar(80) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `tag_name` (`tag_name`)
);
INSERT INTO `tags`(`tag_name`,`tag_translate`) VALUES ('foo', 'bar') ON DUPLICATE KEY UPDATE `tag_translate`='bar';
INSERT INTO `tags`(`tag_name`,`tag_translate`) VALUES ('bla', 'blablabla') ON DUPLICATE KEY UPDATE `tag_translate`='blablabla';
INSERT INTO `tags`(`tag_name`,`tag_translate`) VALUES ('john', 'doe') ON DUPLICATE KEY UPDATE `tag_translate`='doe';
INSERT INTO `tags`(`tag_name`,`tag_translate`) VALUES ('bla', 'mazafaka') ON DUPLICATE KEY UPDATE `tag_translate`='mazafaka';
получим три строки
1 foo bar
2 bla mazafaka
3 john doe
$db->query("INSERT INTO `tags`(`tag_name`,`tag_translate`) VALUES ('$name', '$value') ON DUPLICATE KEY UPDATE `tag_translate`='$value'");
|
|
|
|
|
Записан
|
|
|
|
|
Stasovsky ↓
|
 |
|
01 Сентябрь, 2010, 09:17:14 , спустя 13 часов 31 минуту 41 секунду
|
НЕ ХУЕТА!
ХУЕТА!
|
Сенсей XD
Группа: Джедаи Карма: 54
Сообщений: 3654 Сила слова: 1.48
|
artoodetoo, а если у меня так
INSERT INTO `tags`(`tag_name`,`tag_translate`) VALUES ('PHP', 'php'), ('Новости', 'novosti') ON DUPLICATE KEY UPDATE `tag_translate`='bar';
херня получается...
|
|
|
|
|
Записан
|
|
|
|
|
Hight ↓
|
 |
|
13 Сентябрь, 2010, 07:53:16 , спустя 11 дней 22 часа 36 минут 2 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Красный властелин
Группа: Адекваты Карма: 31
Сообщений: 1626 Сила слова: 1.91
|
Не айс такую задачку решать средствами базы. Данные перед занесением в бд всё-таки надо готовить. Хотя, всё относительно, может задачка действительно этого требует.
|
|
|
|
|
Записан
|
|
|
|
|
Stasovsky ↓
|
 |
|
13 Сентябрь, 2010, 07:55:31 , спустя 2 минуты 15 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Сенсей XD
Группа: Джедаи Карма: 54
Сообщений: 3654 Сила слова: 1.48
|
Hight, предложи вариант лучше))
|
|
|
|
|
Записан
|
|
|
|
|
Hight ↓
|
 |
|
13 Сентябрь, 2010, 07:58:10 , спустя 2 минуты 39 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Красный властелин
Группа: Адекваты Карма: 31
Сообщений: 1626 Сила слова: 1.91
|
Hight, предложи вариант лучше))
Я в хмуром расположении духа сегодня. Даже тему до конца не дочитал.
|
|
|
|
|
Записан
|
|
|
|
|
Дмитрий ↓
|
 |
|
08 Октябрь, 2010, 09:26:04 , спустя 25 дней 1 час 27 минут 54 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 6
Сообщений: 295 Сила слова: 2.03
|
error = 1062 Duplicate entry
INSERT IGNORE INTO вместо INSERT INTO если есть не вставит если нет вставит.
|
|
|
|
« Последнее редактирование: 08 Октябрь, 2010, 09:26:04 от Дмитрий »
|
Записан
|
Надо много пережить, чтобы стать человеком. © Антуан де Сент-Экзюпери
|
|
|
|
arvitaly ↓
|
 |
|
08 Октябрь, 2010, 09:50:36 , спустя 24 минуты 32 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 5
Сообщений: 282 Сила слова: 1.77
|
Кстати PREG_SPLIT_NO_EMPTY
|
|
|
|
|
Записан
|
|
|
|
|