Автор Тема: организация MySql таблицы из Excel  (Прочитано 7232 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
организация MySql таблицы из Excel
« : 30 Апреля 2003, 13:42:15 »
Есть Excel файло, с тремя столбцами (каждый столбец - набор данных)
Все это надо перенести в мускул с целью дальнейшего поиска по этим данным.
Все данные - цифры. Формат следующий:
в первом столбце (365)543
во втором и третьем (123)567, 438, 762 и т.д. Потом может идти еще раз (765)432, 975, 434 и т.д. (все цифры от балды). Цифры в скобках - это префикс, который в принципе добавляется к каждому числу (трехзначному), идущему после префикса.
Необходимо искать по третьему и вторым столбцам, и выводить соотвествующее найденное из первого столбца
Причем для поиска вводится данные с префиксом - то есть шестизначное число.
Всего в Excel чуть больше 4000 строк
Вопрос - как лучше организовать таблицу? В частности какими поля создавать для данных? И как разобраться с префиксом? Сделать для него отдельное поле и при поиске искать сначала по нему, а потом уже по остальным трем цифрам?
Самое гадское - что надо сделать срочно достаточно :(
Спасибо за любую помощь. Не дайци пагибнуть :)

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
организация MySql таблицы из Excel
« Ответ #1 : 30 Апреля 2003, 17:43:41 »
Все - вопрос решился путем изменения структуры таблицы на более подходящую :)
Ну а залить из Excel в MySql оказалось проще простого
В Word открыл Excel таблицу - преобразовал таблицу в текст с разделителями табуляции и залил текстовый файл используя LOAD DATA
Кстати LOAD DATA LOCAL ругалось, и не заливало. Спасибо есть на сайте MySQl есть документация + мнения, где и написали что LOCAL надо опустить. :)

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
организация MySql таблицы из Excel
« Ответ #2 : 30 Апреля 2003, 17:55:02 »
У меня теперь другой вопрос :)
у меня поле в котором ищется число имеет тип TEXT и записи там хранятся в виде
20; 542; 453; 348; и т.п.
и их может быть много (около сотни)
мне нужно заселектить то поле, в котором будет именно то число которое я ищу! Например 20
как мне лучше сделать запрос - чтобы было именно 20 (искать "20;"???)
что мне написать в WHERE чтобы нашло именно те строчки (строчку) где есть 20; а не 120; или 203;
???
« Последнее редактирование: 30 Апреля 2003, 18:33:57 от UltraMax »

Оффлайн C++

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 221
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
организация MySql таблицы из Excel
« Ответ #3 : 30 Апреля 2003, 19:33:26 »
Ппробуй
WHERE column_name REGEXP \' 20;\'

Оффлайн C++

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 221
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
организация MySql таблицы из Excel
« Ответ #4 : 30 Апреля 2003, 19:35:52 »
Да, забыл....
В REGEXP используется синтаксис регулярных выражений

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
организация MySql таблицы из Excel
« Ответ #5 : 30 Апреля 2003, 20:19:04 »
Спасибо помогло
и последний (надеюсь) вопрос :)
у меня в БД MySql три таблицы
в двух из них rate и local называются три поля
id, number, prefix
из формы запросом идут две цифры - сотвтественно number и prefix, надо сначала в local найти а если нет - то в rate найти строку где и prefix и number совпадают и выдернуть оттуда id
а потом в третей колонки (там id поле и number) на основании id найденного - выдернуть number (колнка называется output)
не подскажешь как это лучше сделать
я вроде делаю так
SELECT output.number FROM input_local_center,output WHERE input_local_center.prefix REGEXP "330" and input_local_center.number REGEXP "203";
но выдает 5 тышш записей с лишним вместо одной
где грабли?

Оффлайн C++

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 221
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
организация MySql таблицы из Excel
« Ответ #6 : 30 Апреля 2003, 21:34:25 »
Честно говоря не понял.... подробнее объясни....
А где у тебя в запросе хоть раз упоминается о значении поля id?

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
организация MySql таблицы из Excel
« Ответ #7 : 02 Мая 2003, 20:49:34 »
в общем так
три таблицы
output, input_local_center, input_rate_center
во 2-ой и третьей есть поля id, prefix, number
надо искать сначала в input_local_center, потом в input_rate_center(если в local не найдется) то что будет введено из HTML формы (будет вводиться prefix и number)
как найдет - берет id из табицы, и селектит поле number уже по этому id в таблице output строчку (там есть тоже поле id)
все
вот собсно как мне правильно запрос составить? не подскажете :)

Оффлайн C++

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 221
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
организация MySql таблицы из Excel
« Ответ #8 : 02 Мая 2003, 22:17:20 »
А какая версия MySQL?
Если ниже 4, то только двумя запросами (или тремя если в первой таблице запрос ничего не выдает) ИМХО, т.е. тебе в начале нужно сделать запрос к первой, потом если в первой ничего нет, то во второй найти нужное поле, а потом по выбранному значению id запросить number из третьей таблицы....
т.е
SELECT DISTINCT id FROM input_local_center,input_rate_center WHERE prefix=10 AND number=25

сохраняешь результат запроса в ID

SELECT number FROM output WHERE id=ID

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
организация MySql таблицы из Excel
« Ответ #9 : 03 Мая 2003, 12:43:28 »
ЭЭЭЭ - на сколько я понял вложенные запросы только с версии 4.1 и а не с 4.0, так что увы только несколько запросов :(
Далее - я пробовал уже твой вариант, но все дело в том, что сохранить результат запроса в id можно - но если у меня их несколько? То он вроде не прокатывает во втором select-e - ругается на неправильный запрос
так что я сделал временную таблицу - и в нее результаты выборки кидаю. А затем уже из нее второй SelECT
Кстати - уточнение можно?
Мне надо использовать поиск по второй таблице ТОЛЬКО если в первой ничего нет. Если в первой нашлось - то вторую select-ить не надо.
В твоем SELECT-e вроде как по любому будет в двух таблицах искать. Или я не прав?

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
организация MySql таблицы из Excel
« Ответ #10 : 03 Мая 2003, 14:03:33 »
> охранить результат запроса в id можно - но если у меня их несколько?

SELECT ... WHERE id in (ID1, ID2, .., IDN);

> Если в первой нашлось - то вторую select-ить не надо.
ну так в чем проблема то?
перед тем как выполнять второй запрос сделай проверку
На Машине Тьюринга далеко не уедешь.

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
организация MySql таблицы из Excel
« Ответ #11 : 03 Мая 2003, 14:32:17 »
>перед тем как выполнять второй запрос сделай проверку

это я и сам понимаю что надо делать проверку. Каким образом лучше бы подсказал.

Оффлайн C++

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 221
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
организация MySql таблицы из Excel
« Ответ #12 : 03 Мая 2003, 14:56:21 »
UltraMax
Да прав.
А на каком языке пишешь?

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
организация MySql таблицы из Excel
« Ответ #13 : 03 Мая 2003, 15:08:03 »
C++, ну не на перле же :) Стал бы я в этот топик писать.
PHP 4.3.1

Оффлайн C++

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 221
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
организация MySql таблицы из Excel
« Ответ #14 : 03 Мая 2003, 18:24:10 »

$result
=mysql_query("SELECT id FROM input_local_center WHERE prefix=\'$prefix\' AND number=\'$number\'");
if(!
mysql_num_rows($result))
   {
      
$result=mysql_query("SELECT id FROM input_rate_center WHERE prefix=\'$prefix\' AND number=\'$number\'");
   }
if(
mysql_num_rows($result)#Если есть выбранные строки, то формируем запрос к output
   
{
      
$query="SELECT number FROM output WHERE id IN(";
      while(
$id=mysql_fetch_array($result))
         {
            
$query.=$id["id"].",";
         }
      
#Удалить из $query нпоследнюю запятую, я в PHP не силен, поэтому не нашел как это сделать
      
$query.=")";
      
$number=mysql_query($query);
      
#Извлекаешь все найденные записи и работаешь с ними
   
}

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28