Как можно быстро объединить строки с несколькими пустыми полями в одну, вместо добавления? То есть, вместо того, чтобы было
'a','',''
'','b','c'
сделать сразу
'a','b','c'
в одном кортеже.
Собсно, я написал скрипт, который при добавлении новой строки пытается раскидать содержимое полей по уже существующим строкам, однако сие занимает довольно много времени, потому как циклу приходится для каждого из полей искать подходящую строку(ту, в которой это поле пустое) и UPDATE'ть эту строку.
Итак, еще раз, подскажите, пожалуйста, более быстрый способ решить задачку, про которую написано выше..
Примечание:
OverHerz, а чем, собсно, мой скрипт не подходит под первую строку вашего ответа?
foreach($cond as $cond_name => $cond_value) {
if($cond_value != '') {
$cond_count++;
$q = 'UPDATE `g_ul_cond_orders` SET `'.$cond_name.'`="'.$cond_value.'" WHERE `id`= (SELECT `id` FROM `g_ul_cond_orders` WHERE `ul_id`='.$ul_id.' AND `'.$cond_name.'`="" LIMIT 1);';
$r = mysql_query($q);
if($r) {
$cond[$cond_name] = '';
$cond_count--;
}
}
}
Вполне себе объединяет в цикле. Я спросил, как можно это быстрее сделать?
Другую таблицу создать нельзя, менять структуру этой таблице как-то некультурно, по отношению к тем, кто ее заполнил.
По поводу общих данных - они становятся общими, по мере того, как пользователи добавляют данные. Например, кто-то захотел указать фильтр по одному полю, кто-то по-другому, при этом при проверке фильтров не важно, когда и кто указал эти фильтры, поэтому, чтобы не городить огород из кучи полупустых кортежей, необходимо объединить те, которые уже есть и те, которые будут добавлены.
Примечание:
Ладно, я вижу Вы не собираетесь отвечать на мой вопрос, и предлагаете, вместо этого, поменять сам вопрос (изменить условия задачи) это, конечно, совсем неправильно, чит-код своеобразный получается, однако, ладно. Тогда вот такая задачка:
Напишите полную структуру таблицы БД, которая позволит хранить текстовые данные с привязкой к группам (одно из полей - id группы). Пользователи могут добавлять, изменять и удалять содержимое любых полей, причем играет роль только привязка к группе, то есть какой именно кортеж при этом будет затронут - не имеет значения. Добавлений, и удалений будет много. Очень. В связи с этим, желательно, при добавлении новых полей, записывать их в уже существующие кортежи, где эти поля пусты.
Вот, такое вот длинное условие. Напишите что-то, что работает лучше, чем текущая реализация - засчитаю ответ, плюсану, сниму шляпу, могу даже станцевать.
Текущая структура таблицы:
CREATE TABLE IF NOT EXISTS `g_ul_cond_orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ul_id` int(11) NOT NULL,
`f1`-`f7` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
Примечание:
Ах да, выборки.. Выборки данных из таблицы будут происходить по принипу
"А вот это конкретно взятое поле принадлежит к какой либо группе? К какой?"
(Текущий запрос SELECT `ul_id` FROM `g_ul_cond_orders` WHERE `f1`=data1 OR `f2`=data2 ... GROUP BY `ul_id`;)
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.