поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    A.5.6. Решение проблем с отсутствием строк, удовлетворяющих условиям поиска

    Если сложный запрос на множестве таблиц совсем не возвращает строк, то для выяснения причин его неуспешного выполнения необходимо выполнить следующую последовательность действий:

    1. Проверьте запрос с помощью EXPLAIN и посмотрите, не присутствуют ли в нем явно неправильные записи (see Раздел 5.2.1, «Синтаксис оператора EXPLAIN (получение информации о SELECT).

    2. Выберите только поля, используемые в выражении WHERE.

    3. По одной убирайте из запроса таблицы до тех пор, пока не станут возвращаться какие-нибудь строки. Если таблицы большие, то в запросе имеет смысл использовать LIMIT 10.

    4. Выполните SELECT для столбца, который должен был дать совпадение строки с последней исключенной из запроса таблицей.

    5. Если столбцы типа FLOAT или DOUBLE сравниваются с имеющими дробную часть числами, то нельзя использовать '='. Это распространенная проблема в большинстве компьютерных языков, поскольку значения с плавающей запятой не являются точными. В большинстве случаев проблему решает изменение FLOAT на DOUBLE. See Раздел A.5.7, «Проблемы со сравнением чисел с плавающей точкой».

    6. Если так и не удалось выяснить, в чем загвоздка, то для демонстрации возникших у вас проблем создайте минимальный тест, запускающийся при помощи mysql test < query.sql. Тестовый файл можно создать, воспользовавшись mysqldump --quick database tables > query.sql. Далее откройте файл в редакторе, удалите некоторые команды вставки (если их слишком много) и добавьте в конце файла свою команду выборки. Убедитесь, что проблема по-прежнему проявляется, посредством:

      shell> mysqladmin create test2
      shell> mysql test2 < query.sql
      

      Используя mysqlbug, пошлите тестовый файл в список рассылки на .

     
    © 1997-2005 PHP Club Team
    Rambler's Top100