|
|
|
| В базе 60 таблиц. Мне нужно найти, в какой из таблиц базы находится определенная фраза.
Как делаю. Считываю имена таблиц в базе - $table, считываю имена столцов в каждой таблице- $col , и потом делаю такой запрос:
$sql = "SELECT * FROM $table WHERE $col LIKE '%содержание%'";
Пишет, что не хватает памяти.
Как можно по другому сделать? | |
|
|
|
|
|
|
|
для: Лена
(04.02.2009 в 14:30)
| | Список таблиц и столбцов можно узнать и самому, без перекладывания этой работы на скрипт. | |
|
|
|
|
|
|
|
для: BinLaden
(04.02.2009 в 14:40)
| | то есть делать это средствами SQL? | |
|
|
|
|
|
|
|
для: Лена
(04.02.2009 в 16:04)
| | Наоборот вручную, просто посмотреть в том же phpMyAdmin список таблиц. | |
|
|
|
|
|
|
|
для: BinLaden
(04.02.2009 в 16:12)
| | их 62 штуки. В них и нужно найти материал. Я думала, скриптом это будет быстрее. | |
|
|
|
|
|
|
|
для: Лена
(04.02.2009 в 14:30)
| | что в конечном итоге оказывается в $sql ?
А почему поиск лишь по одной БД? | |
|
|
|
|
|
|
|
для: Trianon
(04.02.2009 в 14:52)
| | - | |
|
|
|
|
|
|
|
для: Trianon
(04.02.2009 в 14:52)
| | >что в конечном итоге оказывается в $sql ?
$sql = "SELECT * FROM $table WHERE $col LIKE '%содержание%'";
$table - таблица из базы, которую получаю в цикле, когда считываю все таблицы, которые есть в базе, $col - поле таблицы, которое тоже получаю в цикле, когда считываю все поля таблицы.
>А почему поиск лишь по одной БД?
Потому что интересует наличие определенного материала в определенной БД. Есть текстовая информация, мне нужно узнать, в какую таблицу она поступает. | |
|
|
|
|
|
|
|
для: Лена
(04.02.2009 в 16:09)
| | > Есть текстовая информация, мне нужно узнать, в какую таблицу она поступает.
Информация поступает не через Ваши скрипты? | |
|
|
|
|
|
|
|
для: BinLaden
(04.02.2009 в 16:14)
| | Нет, через чужие. Если бы через мои, я бы знала, куда все складывается. | |
|
|
|
|
|
|
|
для: Лена
(04.02.2009 в 16:18)
| | Я бы наверное, если приспичило бы, запустил mysqldump с перенаправлением на grep. | |
|
|
|
|
|
|
|
для: Лена
(04.02.2009 в 16:09)
| | то есть этот оператор вызывается во вложенном цикле? | |
|
|
|
|
|
|
|
для: Trianon
(04.02.2009 в 16:21)
| | Да, во вложенном. Как через дамп и grep сделать? | |
|
|
|
|
|
|
|
для: Лена
(04.02.2009 в 16:46)
| |
mysqldump -hхост -uлогин -pпароль --skip-extended-insert база | grep искомое >report.txt
|
Только лучше эту строку в командном файле записать, причем в той кодировке , в которой база лежит. | |
|
|
|
|
|
|
|
для: Trianon
(04.02.2009 в 17:25)
| | Думала сама справлюсь, но не получается.
Я записываю в командной строке то, что вы написали, но у меня пишет: "... не является внутренней или внешней командой... " - и так при любой команде.
Где мне про это почитать?
>Только лучше эту строку в командном файле записать
где почитать, чтобы понять, что вы здесь написали.
Почему так допытываюсь: а вдруг мне когда-то придется еще что-то искать в базе. | |
|
|
|
|
|
|
|
для: Лена
(04.02.2009 в 23:35)
| | mysqldump.exe нужно иметь.
ну и grep.exe тоже.
либо доступным по пути, либо в том каталоге, откуда команду издаете.
Первая утилита входит в поставку сервера MySQL . Среди клиентских утилит.
Если дело у хостера происходит и сервер удаленный доступ к БД не разрешает - то же самое можно выполнить через ssh (если такой доступ разрешил хостер) - тогда все утилиты у него на сервере. | |
|
|
|
|
|
|
|
для: Trianon
(05.02.2009 в 00:05)
| | mysqldump.exe в Денвере не было, нашла в 5 версии MySQL.
grep.exe нашла в пакете unxutils - здесь все дополнительные клиентские утилиты MySQL. Там кроме grep.exe есть еще agrep.exe и egrep.exe. Чем они отличаются, не нашла.
Если искать по такому способу, как вы предложили, получилось вот так:
C:\WebServers\usr\local\mysql5\bin>mysqldump -h localhost -u root --skip-extended-insert drupal | grep -n -i "menu"
|
Это без учета регистра и с указанием номера строки, в которой встречается данный паттерн.
Получилось и по-другому это сделать. Записываем дамп в файл, а дальше уже ищем в файле, сортируем и результат тоже пишем в файл:
C:\WebServers\usr\local\mysql5\bin>mysqldump -h localhost -u root --skip-extended-insert drupal>report.sql
find "menu" <report.sql | sort > nwtrade.txt
|
Проблема теперь вот в чем. Если ищу слово на английском, - все нормально, если на русском, оно не ищется. Что в этом случае делают? | |
|
|
|
|
|
|
|
для: Лена
(12.02.2009 в 16:36)
| | Идея-то основная заключалась в том, чтобы сам дамп не создавать - он же большой как правило...
А чтобы русские слова искать, нужно эту команду в bat-файл поместить. В той же кодировке, в которой дамп формируется.
Впрочем, если кодировка 1251 , можно попробовать перекллючить её командой windows
chcp 1251
Что до источников утилит - то они у нас совпали один-в-один. | |
|
|
|
|
|
|
|
для: Trianon
(12.02.2009 в 16:48)
| | Чуть не купился сам тоже, и посоветовал Лене это чатом. Но внимательно просмотрев саму команду, получаем:
chcp - задает номер кодовой страницы. Поддерживаемые кодовые таблицы с соответствующими странами/регионами или языками приведены в следующей таблице.
Кодовая страница Страна/регион или язык
437 США
850 Многоязыковый (латиница I)
852 Восточная и центральная Европа (латиница II)
855 Кириллица (русский)
857 Турецкий
860 Португальский
861 Исландский
863 Французский (Канада)
865 Скандинавский
866 Русский
869 Современный греческий
Команда проглатывает 1251, но вот будет ли она перключаться на эту кодировку. Навряд ли. | |
|
|
|
|
|
|
|
для: sim5
(12.02.2009 в 17:08)
| | Вот результат моих неглубоких проверок.
В winXP команда переключает окно консоли на 866 и на 1251 кодовую страницу.
Причем я не знаю, как вытрясти из команды списо допустимых параметров.
Правда экранная часть переключается лишь в том случае , если в свойствах окна выставлен tt-фонт Lucida console.
Более того, командой chcp 65001 экранную её часть можно переключить в кодировку utf-8 , клавиатурная сторона работает при этом непредсказуемо, но буковки на экране видны нормально.
В висте ничего не проверял, ибо не пользуюсь. | |
|
|
|
|
|
|
|
для: Trianon
(12.02.2009 в 18:37)
| | Сама ведь DOS не работает в 1251 и не знает ее, а уж тем более UTF. Если, допустим, происходит переключение (ошибку по крайней мере меня не выдает, хотя справка говорит об ином), то что будет в результате выполнения строки командной? Если консоли важны команда и ключи ее, а что там в параметрах данных ей до... тогда должно прокатить. Вы пробовали проверять? | |
|
|
|
|
|
|
|
для: sim5
(12.02.2009 в 18:46)
| | Что проверять?
Проверки переключения выполнялись командами copy con файл и copy файл con | |
|
|
|
|
|
|
|
для: Trianon
(12.02.2009 в 18:59)
| | А у меня SP3, правда с твикером, и лажа получается. | |
|
|
|
|
|
|
|
для: sim5
(12.02.2009 в 19:03)
| | Воизбежание подобного я и предложил в командный файл закатать строку. | |
|
|
|
|
|
|
|
для: sim5
(12.02.2009 в 18:46)
| | >Сама ведь DOS не работает в 1251 и не знает ее, а уж тем более UTF
Собственно речь идет не об DOS, которая не имеет команды chcp, а командной строке Windows. | |
|
|
|
|
|
|
|
для: sim5
(12.02.2009 в 17:08)
| | >Команда проглатывает 1251, но вот будет ли она перключаться на эту кодировку. Навряд ли.
Текущую кодировку всегда можно проверить, если не передавать никаких параметров. Если у вас операционная система Windows XP или выше, команда без проблем переключает кодировку на 1251.
>chcp
Текущая кодовая страница: 866
>chcp 1251
Текущая кодовая страница: 1251
>chcp
Текущая кодовая страница: 1251
|
| |
|
|
|
|
|
|
|
для: cheops
(13.02.2009 в 13:18)
| | Да как я понял, что можно, хотя если верить справке то нет. Дело в том, что я пытаюсь запустить rar из консоли так, после перехода на 1251 - rar не находит путей, а если прописать в 866, то все путем. Да и другая лажа получается. У меня не "чистая" винда, а с измененным интерфейсом местами, установлены твикеры, может какой либо перхватывает на себя, надо просто проверить. На команду да, ошибок не получаю. | |
|
|
|
|
 37.9 Кб |
|
|
для: cheops
(13.02.2009 в 13:18)
| | У меня не так выходит. Прикрепила, что получается. Вместо русских букв ерунда.
А как можно командный файл написать в кодировке utf8? | |
|
|
|
|
|
|
|
для: Лена
(13.02.2009 в 22:14)
| | фонт для окна поставили, как я указывал? | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2009 в 22:44)
| | шрифт поставила.Это получилось.
А вот как написать командный файл в кодировке utf8(в ней составлена база) нигде не нашла, наверное, это невозможно. Получается поиск по русским словам через консоль невозможный. | |
|
|
|
|
|
|
|
для: Лена
(14.02.2009 в 22:40)
| | написать файл можно текстовым редактором, который умеет писать в utf8 .
К таким относится даже примитивный блокнот. Правда первую строку стоит сделать пустой. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2009 в 22:46)
| | >Правда первую строку стоит сделать пустой.
Зачем? | |
|
|
|
|
|
|
|
для: Лена
(14.02.2009 в 23:01)
| | блокнот в начале файла ставит специальный признак, если Вы сохраняете файл в UTF-8 .Так называемый Byte Order Mark .
Если он окажется перед командой - он её испортит.
А если на отдельной строке - испортит только эту отдельную строку.
По хорошему его стоило бы удалить из файла.
Но в принципе, кроме сообщения "xxx" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом. он ничем не грозит. | |
|
|
|
|
|
|
|
для: Trianon
(14.02.2009 в 23:10)
| | >специальный признак
почитала, их еще называют "три невидимых байта".
Получилось. В консоли вот такое:
C:\Documents and Settings\Администратор>cd C:\WebServers\usr\local\mysql5\bin
C:\WebServers\usr\local\mysql5\bin>chcp 1251
Текущая кодовая страница: 1251
C:\WebServers\usr\local\mysql5\bin>res.bat
C:\WebServers\usr\local\mysql5\bin>п»ї
"п»ї" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
C:\WebServers\usr\local\mysql5\bin>mysqldump -h localhost -u root --skip-extende
d-insert drupal | grep -n -i "Читать далее" 1>res.txt
|
Не понятно еще вот что. Мы переводим консоль в кодировку 1251, чтобы различать кириллицу, на которой пишется поисковая фраза. Командный файл составляем, допустим, в блокноте и сохраняем его с кодировкой utf8. Далее из консоли вызываем bat-файл, одну за другой исполняем команды, и тут в grep поисковая фраза уже в кодировке utf8. Как же тогда оболочка видит кириллицу? | |
|
|
|
|
|
|
|
для: Лена
(14.02.2009 в 23:53)
| | Оболочка кириллицу не видит, что очень наглядно показано на приведенном Вами скриншоте.
Да ей и не нужно.
Оболочка - это ж только экран с клавиатурой.
А на время исполнения дампа и грепа ни то ни другое не применяется.
Но в командный файл можно было написать честно (в кодировке utf8):
пустая строка
chcp 65001
mysqldump -h localhost -u root --skip-extended-insert drupal | grep -n -i "Читать далее" 1>res.txt
chcp 866
|
И тогда было бы совсем без кракозябр. | |
|
|
|
|
|
|
|
для: Trianon
(15.02.2009 в 00:02)
| | >можно было написать честно
Так не выходит. Честность не всегда вознаграждается :) | |
|
|
|
|
|
|
|
для: Лена
(15.02.2009 в 00:36)
| | а если руками сперва переключить?
Опять же lucida console должна стоять! | |
|
|
|
|
|
|
|
для: Trianon
(15.02.2009 в 00:42)
| | Я эту lucida console уже намертво себе поставила, там еще пунктик есть - "Сохранить свойства для других окон..." И все равно нет.
Я думаю, что я неправильно сохраняю пакетный файл. Открываю блокнот, вставляю ваш код, сохраняю: в имя файла дописываю расширение bat, в типе выставляю "Все файлы" и кодировка UTF8. В консоле вижу только вот это:
C:\WebServers\usr\local\mysql5\bin>п»ї
"п»ї" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
C:\WebServers\usr\local\mysql5\bin>chcp 65001
Текущая кодовая страница: 65001
|
Команды вообще не работают. | |
|
|
|
|
|
|
|
для: Лена
(15.02.2009 в 01:05)
| | Да... действительно, эта зараза 65001 тут же приводит к тому, что бат-файт прекращает работу...
Значит только руками перед запуском файла.
Но опять же - чисто для эстетики. Так смысл невелик.
Важнее кодировка самого файла. | |
|
|
|
|
|
|
|
для: Trianon
(15.02.2009 в 01:14)
| | >Значит только руками перед запуском файла.
Руками перед запуском файла тоже не идет. Нужно отказаться от эстетики, ради производительности. Да так даже и лучше. Кто-нибудь заглянет в консоль и совершенно не поймет, что я там ищу в базе.
Спасибо вам большое за ваше терпение. Все, иду спать. | |
|
|
|
|
|
|
|
для: Лена
(13.02.2009 в 22:14)
| | Выберите шрифт Lucida Console, Точечные шрифты не поддерживают кодировку cp1251. | |
|
|
|