2017-02-01 2 views
0

Ich habe 2 Tabellen, eine Tabelle ist von Jobs und andere ist Alarmtabelle, wo Schlüsselwörter gespeichert wird. Ich möchte eine Abfrage schreiben, wenn ein Job gebucht wird als Suche aus Alerttabelle und anzeigen alle Datensätze, die einen Wert haben, der in Jobtitel ist ...Suche Datensätze in einer Zeichenfolge

Like job Title is : Web Development 
Alerts tables : 1- web,php,java 
       2- Php,Development, Jquery 
       3- Java,Jquery 

und Abfrage zeigt den Datensatz 1 und 2 von Benachrichtigungen Tisch ...

ich habe versucht, „LIKE“ aber es ist nicht das bekommen Ergebnisse ...

SELECT * FROM `dev_job_alerts` WHERE `jobTitle` LIKE '%Web Development%' 

Wo Jobtitel der Spalte von Alarm Tabelle ist ...

Bitte geben Sie einen nützlichen soltuion

+0

Keiner Ihrer Datensätze ist wie 'Web Development'. Sie haben einige wie "Web" und einige wie "Entwicklung". Sie könnten auf Leerzeichen aufteilen und die Abfrage dynamisch erstellen, Sie könnten Volltextsuche verwenden oder Sie könnten Ihre Tabelle normalisieren. Hat die 'jobs'-Tabelle eine Assoziation zur 'alerts'-Tabelle? – chris85

+0

no in job alerts wir bekommen nur Datensätze vom Benutzer, dass auf wie Schlüsselwörter sie wachsam werden wollen .... also bitte, wenn Sie irgendeine passende Frage haben, lassen Sie mich wissen – DeDevelopers

+0

Ich präsentierte drei Möglichkeiten, damit es funktioniert. – chris85

Antwort

0

Ich würde ‚jobtitle‘ überprüfen. SELECT * FROM 'dev_job_alerts' WHERE 'jobTitle' WIE '% Web Development%'

'jobTitle' ist eine Zeichenfolge und kein Spaltenname.

einfach ändern: SELECT * FROM dev_job_alerts WHERE jobtitle LIKE ‚% Webentwicklung%‘

+0

Falsch ... JobTitle ist ein Spaltenname .. ich schreibe es einfach so 'jobTitle' – DeDevelopers

+0

Welche Datenbank-Engine benutzt du? MSSQL, MySQL? – Scott

+0

Ich benutze MYSQ – DeDevelopers

1

Ein großer Grund für die Schwierigkeit ist, dass Sie nicht-atomare Daten sind Serialisierung und es in einem einzigen Feld Speicher in dein Tisch. Dies ist eine Verletzung von 1NF und das Ergebnis sind Probleme wie die, auf die Sie stoßen.

Eine bessere Lösung ist eine Tabelle mit Jobs, eine Tabelle mit Schlüsselwörtern und eine dritte Tabelle, die dazu dient, einen bestimmten Job mit einer bestimmten Menge von Schlüsselwörtern zu verknüpfen. Zum Beispiel könnten Ihren Job Tabelle sein:

| job_id | job_title | job_description      | 
============================================================= 
|  1 | Developer | Developer description goes here  | 
|  2 | Manager | Manager description goes here  | 
|  3 | DBA  | Database Admin description goes here | 
|  4 | etc  | etc         | 

Schlüsselwörter Tabelle:

| keyword_id | keyword_val | 
============================ 
|   1 | Developer | 
|   2 | Manager  | 
|   3 | Programmer | 
|   4 | PHP   | 
|   5 | DBM   | 
|   6 | MySQL  | 
|   7 | etc   | 

Jobs verknüpfen Sie eine Verknüpfung verwenden Tabelle wie folgt

| job_id | keyword_id | 
======================= 
|  1 |   1 | // Link "Developer" keyword to Developer job 
|  1 |   4 | // Link "PHP" keyword to Developer job 
|  1 |   6 | // Link "MySQL" keyword to Developer job 
|  3 |   5 | // Link "DBA" keyword to DBA job 
|  3 |   6 | // Link "MySQL" keyword to DBA job 

Mit einer Struktur können Schlüsselwörter können Sie leicht alle Jobs erhalten, die mit einem bestimmten Keyword verknüpft sind.

SELECT DISTINCT job.* 
FROM job 
JOIN job_keyword ON job.job_id = job_keyword.job_id 
JOIN keyword ON job_keyword.keyword_id = keyword.keyword_id 
WHERE keyword.keyword_val = "MySQL" 

Sie auch Arbeitsplätze durch mehrere Keywords bekommen, die alle Schlüsselwörter zu einem bestimmten Auftrag verbunden, etc. erhalten

Es kann ein bisschen mehr Arbeit einzurichten, aber auf lange Sicht mit Verlinkung Tabellen zum Modellieren vieler Beziehungen ist eine weitaus leistungsfähigere Lösung als der Versuch, Daten in Felder zu serialisieren.

+0

Ich kann keine Verknüpfungstabelle verwenden, da Jobbenachrichtigungen nur eine Tabelle vom Benutzer beim Abonnieren der Warnungen ist .. habe keine Sorge mit der Job-Tabelle .. arbeiten auf diese Weise, wenn ein Job gebucht wird. Der Code sucht nach den Relevant-Alert-Records, die Job-Titel-Keywords und E-Mails enthalten, um über diesen Job zu benachrichtigen. Das ist – DeDevelopers

+1

Es veranschaulicht das allgemeine Prinzip der Modellierung vieler Beziehungen. Ich bezweifle, dass es einen guten Grund gibt, warum Sie diese Technik nicht auf Ihren speziellen Fall anwenden können. – GordonM

Verwandte Themen