За последние 24 часа нас посетили 74156 программистов и 10157 роботов. Сейчас ищет 2171 программист ...

Поиск по таблице

Тема в разделе "PHP и базы данных", создана пользователем Gangstel, 5 фев 2012.

  1. Gangstel

    Gangstel Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    13
    Симпатии:
    0
    Имеем таблицу table1 в mysql из двух столбцов и множества строк. Первый столбец "raschet" содержит произвольные тексты. Второй столбец "codes" содержит тексты вида "587 -7952 +4568 5465", то есть в одной ячейке данного столбца содержатся целые числа (могут быть со знаком плюс, минус или вообще без них), разделенные пробелом. Задача - осуществить поиск по второму столбцу, например, найти ячейки в которых имеются числа больше 1000 или числа 2 или числа меньше 500.
     
  2. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    Re: Поиск по массиву

    http://www.mysql.ru/docs/man/String_com ... tions.html
    тебя там интересует REGEXP, как вариант

    ну или выбирать тупо всё, парсить и отсеивать ненужное


    Хотя регулярку можно составить для конкретного условия, а у тебя слишком много "или" в условии.
     
  3. Gangstel

    Gangstel Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    13
    Симпатии:
    0
    смысл какой. у юзера три варианта поиска - три текстовых поля, куда можно ввести один код. 1) выполнить поиск, который вернет ячейки, где есть коды меньше указанного. 2) выполнить поиск, который вернет ячейки, где есть коды больше указанного. 3) выполнить поиск, который вернет ячейки, где есть указанный код.
    но я так понимаю, что нужно выбрать весь столбец с кодами, загнать его в пхп массив и с ним уже работать. то есть будет функция поиска, которая среди всех элементов массива будет осуществлять поиск.
    или же это можно осуществить регуляркой в запросе к БД?
     
  4. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    Ну напиши хоть что-то сам.
    Алгоритм прост выбираешь все записи из базы
    В цикле анализируешь соответствие текущей записи нужному условию. Если соответствует - выводишь.

    Функции для работы с базой http://www.php.ru/manual/book.mysql.html

    Нет, регулярки в даном случае непрокатят. Это для 1000 или 500 легко условие задать можно. В общем случае с произвольными числами не стоит париться
     
  5. Gangstel

    Gangstel Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    13
    Симпатии:
    0
    нужно найти в таблице +65678459. делаю sql запрос в phpmyadmin
    SELECT * FROM `table1` WHERE `codes` REGEXP '\+65678459'
    выдает ошибку "#1139 - Got error 'repetition-operator operand invalid' from regexp" почему? вроде экранировал плюс
    а если SELECT * FROM `table1` WHERE `codes` REGEXP '\\+65678459', то выдает правильный результат
     
  6. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    ты меня игнорируешь? :)

    все правильно, спец-символ экранируется двойным слешем
     
  7. Gangstel

    Gangstel Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    13
    Симпатии:
    0
    просто делаю свою тему) вроде пока выходит
     
  8. asokol

    asokol Активный пользователь

    С нами с:
    17 янв 2012
    Сообщения:
    162
    Симпатии:
    0
    Чтобы было проще делать выборку (и, собственно, возможно), надо второе поле заменить на число X, а в новой таблице, состоящей из двух полей, в первое поле положить это число X, а во второе - по очереди числа, полученные разбиением списка "587 -7952 +4568 5465" по пробелу. Короче говоря, привести к нормальной форме.
     
  9. Gangstel

    Gangstel Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    13
    Симпатии:
    0
    вроде сделал как-то по своему)