Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Поиск совпадений по базе без id
Покинул форум
Сообщений всего: 89
Дата рег-ции: Июнь 2008
Помог: 0 раз(а)
Нужно перодически обнавлять таблицу из excel но там нет id и при добавлении нужно сравнивать содержимое базы на сервере и в excel. Если есть новые пункты то добавить их. Как лучше сделать?
Champion
Отправлено: 02 Сентября, 2008 - 11:52:43
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
проверь селектом, существует ли уже такая строка. (если он вернет пустой набор, значит строки нет). И если таоке тебе часто прийдется делать, советую создать индекс по проверяемым полям
pifon1989
Отправлено: 02 Сентября, 2008 - 12:55:29
Частый гость
Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008
Помог: 0 раз(а)
Почитайте про fgetcsv() http://www.php.su/functions/?fgetcsv . Для того, чтобы ей воспользоваться, в ms excel или любом другом редакторе таблиц выберите "сохранить как" и найдите там что-то вроде text (.csv). При сохранении будет предложено выбрать знак-разделитель ячеек. По умолчанию обычно запятая.
Функция fgetcsv извлекает из файла данного типа построчно массив, элементами которого являются значения ячеек в строке.
Общий вид её работы таков:
----- Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
Champion
Отправлено: 02 Сентября, 2008 - 13:18:33
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Цитата:
$select = mysql_query("SELECT * FROM `имя таблицы`");
не надо так.
Допустим, (воспользуюсь твоими же переменными) в у нас такое вот соответствие:
$get[0] - field1
$get[1] - field2
...
(fieldX - поля из таблицы).
Тогда с каждым $get сделаем так:
$select = mysql_query("SELECT * FROM `имя таблицы` WHERE field1 = $get[0] AND field2 = $get[1]...") or die("Wrong query sintax");
if (is_null(mysql_fetch_assoc($select)) //то такой записи нет, вставляем; иначе - такая уже есть.
И еще: минус Вашего подхода: коннект к БД в цикле; полная выборка из БД одного и того же набора, опять-таки, в цикле; и фильтрация набора средствами php (Добавление)
Смайлы, которые вы видите выше, это не смайлы))
pifon1989
Отправлено: 02 Сентября, 2008 - 13:26:02
Частый гость
Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008
Да, согласен. Правда стоит ещё учеть, что аффтора нужно будет поднагрузить определением названия нужного ему поля, а так - конечно.
Champion пишет:
коннект к БД в цикле; полная выборка из БД одного и того же набора, опять-таки, в цикле; и фильтрация набора средствами php
А вот это уже да, это круто... сейчас изменю... Просто быстро писал и как-то даже и не подумал. Я обычно привык концентрироваться на конкретном участке, иначе когда код огромный - сломаеш мосх
Champion пишет:
Смайлы, которые вы видите выше, это не смайлы))
Угумс
----- Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
Champion
Отправлено: 02 Сентября, 2008 - 13:33:06
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Цитата:
А вот это уже да, это круто... сейчас изменю... Просто быстро писал и как-то даже и не подумал. Я обычно привык концентрироваться на конкретном участке, иначе когда код огромный - сломаеш мосх
Когда на скорую руку пишешь, и не такое случается
mixnn
Отправлено: 02 Сентября, 2008 - 13:55:27
Гость
Покинул форум
Сообщений всего: 89
Дата рег-ции: Июнь 2008
Помог: 0 раз(а)
Champion пишет:
проверь селектом, существует ли уже такая строка. (если он вернет пустой набор, значит строки нет). И если таоке тебе часто прийдется делать, советую создать индекс по проверяемым полям
Я так делаю но некоторые строки он все равно не различает, и опять добавляет
pifon1989 пишет:
Почитайте про fgetcsv()
Я импротирую из .xls а не .csv, по импорту все ок
Я думаю что это может из за типов полей(текст, десятичные).
Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008
Помог: 0 раз(а)
mixnn пишет:
Я импротирую из .xls а не .csv, по импорту все ок
xls - бинарный файл. Как это он у вас импортируется? 0.о Ну открыться пожалуй то окроется, но там же внутри шестнадцатиричный код. По крайней мере, с утра ещё был. Поэтому и нужно сохранять в текстовом формате.
Вы попробуйте вывести его на экран. Картинка должна быть супер. ;)
----- Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
Champion
Отправлено: 02 Сентября, 2008 - 15:58:26
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
pifon1989, есть в pear такая штука excelSpreadsheetReader. Она позволяет вsnfcrbdfnm данные из xls. Наверное, ей и пользовался mixnn.
Но распарсить csv конечно гораздо проще. только надо не забыть заменить везде, где встречаетсяч символ-разделитель на что-нибудь другое. А то возможно происхождение различных неожиданных чудес
pifon1989
Отправлено: 02 Сентября, 2008 - 16:19:10
Частый гость
Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008
Помог: 0 раз(а)
Champion пишет:
только надо не забыть заменить везде, где встречаетсяч символ-разделитель на что-нибудь другое. А то возможно происхождение различных неожиданных чудес
Ошибка если в ячейках текст с запятыми? Да, но можно как-нибудь выпендриться, сделать разделителем тильду или амперсанд. Знак решётки, в конце-концов, она используется крайне редко. Так что варианты тут есть, особенно в тех случаях, когда excel. Я ещё не видел садистов, которые пишут там романы с детективами
Champion пишет:
есть в pear такая штука excelSpreadsheetReader. Она позволяет вsnfcrbdfnm данные из xls. Наверное, ей и пользовался mixnn.
Я пока ещё не лазил в такие глубины В основном PECL ковырял, там когда один скрипт писал нашёл немало полезного. Но у меня рут, а на хостингах никто лезть в корень пхп не даст, и ставить расширения потому что Вася Пупкин захотел скорее всего не станут
Да и дополнительные библиотеки, они, на мой сугубо личный вгляд, вещь спорная: у одного пойдёт, у другого - нет. Скрипт сугубо личного пользования, скажем так. Да и мастерством великого нупа не овладаешь, пользуясь чужими готовыми наработками, имхо (Добавление)
P.S.:
pifon1989 пишет:
Я ещё не видел садистов, которые пишут там романы с детективами
И не приведи Боже..
----- Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
Champion
Отправлено: 02 Сентября, 2008 - 16:30:45
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
pifon1989 пишет:
и ставить расширения потому что Вася Пупкин захотел скорее всего не станут
А их можно не ставить. Просто создай папку там, где тебе можно, и инклюдь из нее).
Цитата:
Да и дополнительные библиотеки, они, на мой сугубо личный вгляд, вещь спорная: у одного пойдёт, у другого - нет. Скрипт сугубо личного пользования, скажем так. Да и мастерством великого нупа не овладаешь, пользуясь чужими готовыми наработками, имхо
Да, но бывает проще воспользоваться тем, что есть, чем изобретать велосьпед с нуля. И, кстати, если не копировать бездумно, то и из них можно чему-нибудь научиться
pifon1989
Отправлено: 02 Сентября, 2008 - 16:43:05
Частый гость
Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008
Помог: 0 раз(а)
Champion пишет:
Да, но бывает проще воспользоваться тем, что есть, чем изобретать велосьпед с нуля. И, кстати, если не копировать бездумно, то и из них можно чему-нибудь научиться
Может быть. Но я особенный и никогда не ищё лёгких путей! *гордо выпятил грудь, сзади порвалась майка*
----- Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
Вездеход
Отправлено: 02 Сентября, 2008 - 17:12:05
Частый посетитель
Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008 Откуда: Россия
Помог: 0 раз(а)
нет вы не особенный. вопщем то я тоже "не люблю" брать чей то код - потому пишу все сам. не нравится мне капаться в чужы кодах... ой не нравится. хотя понимаю что это не савсем правельно - ибо получается медленнее и не всегда лучше.
----- о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
pifon1989
Отправлено: 02 Сентября, 2008 - 17:17:49
Частый гость
Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008
Помог: 0 раз(а)
Вездеход пишет:
нет вы не особенный
Ну всё, я обиделся xDD
Вездеход пишет:
хотя понимаю что это не савсем правельно - ибо получается медленнее и не всегда лучше.
По-хорошему то вообще чужими кодами лучше начать пользоваться когда станешь ассом в функциях и операторах стандартной сборки, будешь знать от а до я. Фишка в том, что когда, и, разумеется, если этот день наступит, ты будешь уже на том уровне, когда дополнительные функции писать в pear и pecl станешь сам, и при этом тебе самому ничего лишнего уже не понадобится, имхо
----- Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.