MySQL ve PHP arama motoru sorgusu nasıl yapılır?

2 Cevap php

Ben bir intranet bir arama motoru yapmak istiyorum. Şimdi ben PHP bu maddeyi kullanın.

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

Ama çalışmıyor gibi görünüyor. Nerede yanlış olduğunu biliyor musunuz?

Şimdiden teşekkürler.

Edit:

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

Ben sorgu maddesini değiştirdiniz. Bu kod ile, i ben ne yapmak istediğinizi biliyorum düşünüyorum.

Ben Entreprise tablonun tüm sütunlarda içeriği ve çalışan tablonun tüm sütunlarda içeriği eşleşen bir şey bulmak istiyorum.

2 Cevap

Bu tam olarak ne yapmaya çalıştığını görmek zor, ama belirtmek için, SQL sorgusunda, gerekir:

  • hangi bir from fıkra ile, çalışan masalar
  • hangi arama where maddesinde yapılması gereken alanlar.
  • how the data between employees and enterprises are related :
    • Eğer İşletmelerin ve çalışanları için aramak istiyorsunuz?
    • çalışanlar ve orada işletmeler için?
    • tüm işletmeler ve çalışanlar için zaman çalışan veya kurumsal kelimeleri içerir?


You could use something like this to search for entreprises that contain the word, and get their employees to :

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


Or, to search for employees that match the criteria and get their entreprise too :

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


(just some ideas -- you'll have to build from there !)

Bu:

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

Geçerli bir SQL değil. Bu ne yapmak istediğinizi tahmin etmek zor, ama yine de çalışıyorum: Eğer çalışanları bulmak ve adıyla veya onları istihdam kuruluş onları aramak istiyorum. Durum böyle mi? Yoksa Çalışan ve / veya işletmelerin aramak istiyorsunuz?

DÜZENLEME

Ben Entreprise tablonun tüm sütunlarda içeriği ve çalışan tablonun tüm sütunlarda içeriği eşleşen bir şey bulmak istiyorum.

Tamam, her şeyden önce SQL muhtemelen bu iş için en iyi araç değildir farkına varmalıdır. Diğer yorumcu bakın - sfenks ve arkadaşları hakkında yaptığı önerileri iyi. Ama yine de, sen gerçekten istiyorsanız:

$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...
';

Eğer mutlu kılan bir şey değil gördüğünüz gibi.

Size daha fazla sevinç verebilir bir başka yaklaşım, ilgilendiğiniz tablodaki tüm satırları taramak ayrı kelimelerle aramak istediğiniz metinleri ayrıştırmak ve bir anahtar kelime tablodaki saklamak için bazı gecede işi olan ve arasındaki ilişki depoluyor kaynak veritabanı ve ayrı bir tabloda anahtar kelimenin bir nesne. Daha sonra anahtar kelime masa aramak ve bu satırları almak için gerçek sorgu oluşturmak için bir anahtar kelime koleksiyonu bulmak id ve tablo adları kullanabilirsiniz. Bu ben ne olduğunu, ve o inşaat büyük. Nesnelerin toplanması çok büyük oldukça mümkündür oysa karşılaşacak kelime görece küçük bir miktarda, yoktur, çünkü bu daha iyi çalışır.