Как сделать запрос поисковой системы в Mysql & PHP? - PullRequest
0 голосов
/ 10 февраля 2010

Я хочу сделать поисковик во внутренней сети. Теперь я использую это предложение в PHP.

$k = explode(" ",$_GET[key]);
$sql = "select entreprise.*, employee.* where entreprise.* or employee.* like  '%$k[0]%' or '%$k[1]%'";

Но, похоже, не работает. Ты знаешь где не так?

Спасибо заранее.

Edit:

$sql = "select * from entreprise, site, salarie where entreprise.*, site.*, salarie.* like  '%$k[0]%' or '%$k[1]%'";

Я изменил условие запроса. С этим кодом, я думаю, вы можете знать, что я хочу сделать.

Я хочу найти все, что соответствует содержимому во всех столбцах таблицы entreprise и содержимому во всех столбцах таблицы сотрудников.

Ответы [ 2 ]

1 голос
/ 10 февраля 2010

Трудно точно понять, что вы пытаетесь сделать, но вам нужно в своем SQL-запросе указать:

  • с какими таблицами вы работаете, с предложением from
  • , по каким полям должен быть выполнен поиск, в предложении where.
  • как связаны данные между работниками и предприятиями:
    • Вы хотите искать предприятия и их сотрудников?
    • для работников и предприятий?
    • для всех предприятий и работников, когда работник или предприятие содержит слова?


Вы можете использовать что-то вроде этого для поиска предприятий, которые содержат слово, и заставить своих сотрудников:

select *
from entreprise
    inner join employee on employee.id_entreprise = entreprise.id
where entreprise.name like '%word%'
    or entreprise.description like '%word%';


Или, чтобы найти сотрудников, которые соответствуют критериям и получить их предприятие:

select *
from employee
    inner join entreprise on entreprise.id = employee.id_entreprise
where employee.name like '%word%';


(только некоторые идеи - вам придется строить оттуда!)

1 голос
/ 10 февраля 2010

Это:

$sql = "select entreprise.*, employee.* where entreprise.* or employee.* like  '%$k[0]%' or '%$k[1]%'";

не является допустимым SQL. Трудно угадать, что вы хотите сделать, но я все равно пытаюсь: вы хотите найти сотрудников и искать их по имени или по предприятию, в котором они работают. Это тот случай? Или вы хотите искать работу и / или предприятия?

EDIT

Я хочу найти все, что соответствует содержимому во всех столбцах таблицы entreprise и содержимому во всех столбцах таблицы сотрудников.

Хорошо, прежде всего вы должны понимать, что SQL, вероятно, не лучший инструмент для этой работы. Смотрите другого комментатора - его предложения о сфинксе и друзьях хороши. Но все же, если вы действительно хотите:

$sql = '
    SELECT e.id, e.name
    FROM   enterprise e
    -- first, look in column1
    WHERE  e.column1 LIKE '."'%".$k[0]."%'".'
    OR     e.column1 LIKE '."'%".$k[1]."%'".'
    ...etc for all entries in k...
    OR     e.column1 LIKE '."'%".$k[N]."%'".' 
    -- then, look in column2
    OR     e.column2 LIKE '."'%".$k[0]."%'".'
    OR     e.column2 LIKE '."'%".$k[1]."%'".'
    ...and so on and so forth for all entries in $k and all columns in enterprise...
    UNION ALL
    SELECT s.id, s.name
    FROM   salarie s
    WHERE  ...and the same for columns of salarie...
    ...
    UNION ALL
    ...any other tables you want to search...
';

Как видите, не то, что делает вас счастливыми.

Другой подход, который может доставить вам больше радости, - это выполнить одну ночь, чтобы отсканировать все строки в таблицах, которые вас интересуют, разобрать тексты, которые вы хотите найти, в отдельные слова, сохранить их в таблице ключевых слов и сохранить связь между объектом из исходной базы данных и ключевым словом в отдельной таблице. Затем вы можете выполнить поиск в таблице ключевых слов и использовать найденные вами идентификаторы и имена таблиц для набора ключевых слов, чтобы построить фактический запрос для получения этих строк. Это то, что я делаю, и это прекрасно работает. Это работает лучше, потому что есть сравнительно небольшое количество слов, с которыми вы столкнетесь, в то время как набор объектов весьма возможен очень большой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...