php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.11.2011, 02:59  
Erfahrener Benutzer
 
Registriert seit: 15.02.2011
Beiträge: 102
PHP-Kenntnisse:
Anfänger
konfusius befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Problem mit Querry ....MATCH .. AGAINST

moin moin,

ich hab mich grad den ganzen abend mit einer MYSQL abfrage rumgeärgert.
ich find einfach den fehler in der syntax nicht.

das ganze soll eine suchfunktion werden...

ich bekomme den fehler:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MATCH( stellenbezeichnung , ort) AGAINST ('klappts muenchen')' at line 2

PHP-Code:
<?php session_start();
error_reporting(E_ALL);
                            

    if(!empty(
$_POST['sucheangebotsnummer']))
        {
                            
        
$angebotsnummer "WHERE angebotsnummer = '".mysql_real_escape_string($_POST['sucheangebotsnummer'])." ' ";
        
$hilfe  ' AND WHERE';
        echo 
'xxx'.$angebotsnummer.'xxx';
        }
        else
            {
            
$angebotsnummer '';
            
$hilfe  '';
            echo 
'xxx'.$angebotsnummer.'xxx';
            }

    if(!empty(
$_POST['suchestellenbezeichnung']))
        {
        
$stellenbezeichnung mysql_real_escape_string($_POST['suchestellenbezeichnung']);
    
        }
        else
            {
            
$stellenbezeichnung '';
            }
    
    if(!empty(
$_POST['sucheort']))
        {
        
$ort mysql_real_escape_string($_POST['sucheort']);
        }
        else
            {
            
$ort '';
            }
                        
                            
$hilfe1 ' ';
                            
$hilfe3 '';
                                
$db_host ="localhost";
                                
$db_user ="root";
                                
$db_pwd ="produktion2011";
                                
$db_name="stellenangebote";
        

                                
$verbindung = @mysql_connect($db_host$db_user$db_pwd);
                                
mysql_select_db($db_name$verbindung)or die ("Datenbank konnte nicht SELECTed werden: " .mysql_error()); 
        
        
        
                                
$sqlsprintf(
                                
"SELECT datum , stellenbezeichnung , stellenbeschreibung , anforderungen , angebot , vztz , ort , frist , angebotsnummer , suchbegriffe
                                FROM angebote %s %s MATCH( stellenbezeichnung , ort) AGAINST ('%s  %s')"
,
                                
                                
$angebotsnummer$hilfe$stellenbezeichnung$ort);
                echo 
$angebotsnummer;
                                
$i 1;
                                
$result=mysql_query($sql,$verbindung);
                                echo 
mysql_error();
                                while(
$aus=mysql_fetch_array($result))
                                        {
                    
                                        
/* unnötige zuweisung von $daten..., $aus hätte gereicht */
                                        
$daten[$i][0]=$i;
                                        
$daten[$i][1]=$aus['datum'];
                                        
$daten[$i][2]=$aus['stellenbezeichnung'];
                                        
$daten[$i][3]=$aus['stellenbeschreibung'];
                                        
$daten[$i][4]=$aus['ort'];
                                        
$daten[$i][5]=$aus['vztz'];
                                        
$daten[$i][6]=$aus['anforderungen'];
                                        
$daten[$i][7]=$aus['angebot'];
                                        
$daten[$i][8]=$aus['frist'];
                                        
$daten[$i][9]=$aus['angebotsnummer'];
                                        
$daten[$i][10]=$aus['suchbegriffe'];
                
                                        
                    
                                        echo 
'<table border="1" style="background-color: #bcee68;"><th style="background-color: yellow;">Ergebnis Nr.: &nbsp '.$i.'</th><tr><td>Inserat vom:</td><td width="480px">';
                                        
print_r($daten[$i][1]);
                                        echo
'</td></tr><tr><td>Angebotsnummer:</td><td>';
                    
                                        
print_r($daten[$i][9]);
                                        echo
'</td></tr><tr><td>Stellenbezeichnung:</td><td>';
                    
                                        
print_r($daten[$i][2]);
                                        echo
'</td></tr><tr><td>Stellenbeschreibung</td><td>';
                                        
print_r($daten[$i][3]);
                                        echo
'</td></tr><tr><td>Ihr Profil:</td><td>';
                                        
print_r($daten[$i][6]);
                                        echo
'</td></tr><tr><td>Unser Angebot:</td><td>';
                                        
print_r($daten[$i][7]);
                                        echo
'</td></tr><tr><td>Vollzeit/Teilzeit:</td><td>';
                                        
print_r($daten[$i][5]);
                                        echo
'</td></tr><tr><td>Arbeitsort:</td><td>';
                                        
print_r($daten[$i][4]);
                                        echo
'</td></tr><tr><td>Bewerbungsfrist:</td><td>';
                                        
print_r($daten[$i][8]);
                                        echo
'</td></tr></table><b> &nbsp </b>';
                                        
$i++;


                                
                                
                                        }
hat irgendjemand eine idee, was zum... damit nicht stimmt?!

danke!
konfusius ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 04.11.2011, 06:09  
Erfahrener Benutzer
 
Registriert seit: 25.01.2009
Beiträge: 1.027
PHP-Kenntnisse:
Fortgeschritten
Capfly befindet sich auf einem aufstrebenden Ast
Capfly eine Nachricht über ICQ schicken Capfly eine Nachricht über MSN schicken
Standard

MATCH AIGAINST mal zwischen SELECT und FROM. http://dev.mysql.com/doc/refman/5.1/...xt-search.html
__________________
MfG
~Capfly
Jetzt NEU! Cpix & Wbits Katahlan.de - Das Browsergame
Capfly ist offline   Mit Zitat antworten
Alt 04.11.2011, 09:29  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Dein Skript generiert u.A. die folgenden Queries:

Code:
SELECT 
  datum , 
  stellenbezeichnung , 
  stellenbeschreibung , 
  anforderungen , 
  angebot , 
  vztz , 
  ort , 
  frist , 
  angebotsnummer , 
  suchbegriff
FROM 
  angebote 
WHERE 
  angebotsnummer = 'ZAHL_AUS_POST' 
  AND WHERE MATCH( stellenbezeichnung , ort) AGAINST ('BEZEICHNUNG_AUS_POST ORT_AUS_POST')
oder

Code:
SELECT 
  datum , 
  stellenbezeichnung , 
  stellenbeschreibung , 
  anforderungen , 
  angebot , 
  vztz , 
  ort , 
  frist , 
  angebotsnummer , 
  suchbegriff
FROM 
  angebote 
MATCH( stellenbezeichnung , ort) AGAINST ('BEZEICHNUNG_AUS_POST ORT_AUS_POST')
Das ist doch nicht Dein Ernst, oder?

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 04.11.2011, 16:29  
Erfahrener Benutzer
 
Registriert seit: 15.02.2011
Beiträge: 102
PHP-Kenntnisse:
Anfänger
konfusius befindet sich auf einem aufstrebenden Ast
Standard

tja, schade, aber ich muss mich wohl als schwachkopf outen.
war schon etwas spät gestern. das einzige, was ich jetzt sehe, ist das die zweite querry nicht laufen kann, weil ohne das argument 'angebotsnummer' auch ein teil der syntax fehlt.

und da ich die im test nie eingegeben habe - konnte das so oder so nicht funktionieren. toll.

und in der ersten querry ist vor MATCH ein WHERE zuviel, wenn die angebotsnummer eingegeben werden sollte, nehm ich an. (oder?)

getest habe ich ohne angebotsnummer aber mit bezeichnung und ort.

die querry hätte dann doch so aussehen sollen:
PHP-Code:
SELECT ..... FROM angebote ..(leere übergabe $).... WHERE  MATCH (stellenbezeichnung ortAGAINST ('BEZEICHNUNG_AUS_POST ORT_AUS_POST'
...und warum das jetzt nicht funktioniert (darum gehts mir hier grade) kapiere ich nicht. das ist doch die korrekte syntax, wenn ich FULLTEXT in den spalten stellenbezeichnung und ort nach sowohl .... und .... suchen will.

Oder nicht? hab schon überall gesucht, aber ich finde nur diese syntax.
konfusius ist offline   Mit Zitat antworten
Alt 04.11.2011, 16:47  
Erfahrener Benutzer
 
Registriert seit: 15.02.2011
Beiträge: 102
PHP-Kenntnisse:
Anfänger
konfusius befindet sich auf einem aufstrebenden Ast
Standard

so, eine kleine änderung in dem skript:
PHP-Code:

if(!empty($_POST['sucheangebotsnummer']))
        {
                            
        
$angebotsnummer "WHERE angebotsnummer = '".mysql_real_escape_string($_POST['sucheangebotsnummer'])." ' ";
        
$hilfe  ' AND WHERE';
        echo 
'xxx'.$angebotsnummer.'xxx';
        }
        else
            {
            
$angebotsnummer 'WHERE';
            
$hilfe  '';
            echo 
'xxx'.$angebotsnummer.'xxx';
            } 

jetzt bekomme ich folgenden MsSQL Fehler:

---Can't find FULLTEXT index matching the column list---

ich hoffe, das bedeutet, das die querry an sich jetzt okay war, aber leider die entsprecheneden tabellenspalten noch keinen FULLTEXT Index haben - ist das soweit richtig?


hm, ich bestehe übrigens auch garnicht auf dieser lösung. das ist nur grade der erste versuch, eine suchfunktion zu schreiben. an was für andere ansätze könnte man denn nich denken?
MATCH AGAINST taugt ja zB auch nicht für eine unscharfe suche, die zB den Bürokaufmann findet, obwohl nur "kaufmann" gesucht wurde.
und bei LIKE befürchte ich dann evtl viel zu viele suchergebnisse. ausserdem hatte ich da mit dem einfügen der variablen auch irgendwie probleme mit der sprintf() bzw. mit den %platzhaltern, die in der LIKE syntax auch enthalten sind.

Geändert von konfusius (04.11.2011 um 16:59 Uhr).
konfusius ist offline   Mit Zitat antworten
Alt 04.11.2011, 23:51  
Erfahrener Benutzer
 
Registriert seit: 15.02.2011
Beiträge: 102
PHP-Kenntnisse:
Anfänger
konfusius befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
$sqlsprintf(
                                
"SELECT datum , stellenbezeichnung , stellenbeschreibung , anforderungen , angebot , vztz , ort , frist , angebotsnummer , suchbegriffe,
                                 MATCH( stellenbezeichnung, ort ) AGAINST ('%s') FROM angebote"
,
                                
                                 
$ort ); 
...jetzt hab ich es erstmal nur mit einem suchbegriff und zwei spalten probiert.
dummerweise wird als ergebnis jede tabellenzeile ausgegeben. auch wenn der suchbegriff nicht vorkommt.

jetzt bin ich am ende mit meinem latain - kann mir jemand evtl. einen tip geben?
konfusius ist offline   Mit Zitat antworten
Alt 05.11.2011, 00:08  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von konfusius Beitrag anzeigen
dummerweise wird als ergebnis jede tabellenzeile ausgegeben. auch wenn der suchbegriff nicht vorkommt.
Wie lautet Suchbegriff, und wie sieht der Datenbestand aus (Umfang, Vorkommen des Suchbegriffs)?

Berücksichtige die Hinweise zur Volltextsuche im Handbuch – u.a., was Stopwords angeht, und auch dass die Volltextsuche erst bei größeren Datenbeständen sinnvolle Ergebnisse liefert.

Zitat:
ausserdem hatte ich da mit dem einfügen der variablen auch irgendwie probleme mit der sprintf() bzw. mit den %platzhaltern, die in der LIKE syntax auch enthalten sind.
Vielleicht solltest du dich erst mal ein bisschen intensiver mit den Grundlagen beschäftigen – damit du nicht die Wahl des Werkzeugs davon abhängig machen musst, wo dich deine Unkenntnis der Syntax am wenigsten behindert
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 05.11.2011, 00:31  
Erfahrener Benutzer
 
Registriert seit: 15.02.2011
Beiträge: 102
PHP-Kenntnisse:
Anfänger
konfusius befindet sich auf einem aufstrebenden Ast
Standard

ja, ich muss mich auf jeden fall noch mit grundlagen beschäftigen - tue ich hier ja grade. ich übe....

ich hab auch grad gemerkt, dass ich noch nicht verstanden hatte, was MATCH() AGAINST() für ergebnisse liefert. die querry an sich funktioniert.
das andere problem war, dass man in den tabellen einen extra index mit verknüpfungen der spalten anlegen muss, wenn man in mehr als einer spalte gleichzeitig suchen will. ort und stellenbezeichnung waren noch nicht verknüpft.

jetzt funktioniert es. allerdings bin ich nach deinen tips fast schon überzeugt, dass es nicht die optimalste lösung ist.

vielleicht ist es doch besser mit der unscharfen suche per LIKE %..%.

wenn keiner mehr einen tip hat:

vielen dank erstmal & schönes wochenende!
konfusius ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Problem: PHP Selbe Datei mehr als 1 Mal soulan PHP Tipps 2008 13 28.11.2008 22:51
Problem Upload mehrere Dateien und schreiben in DB Lapje PHP Tipps 2008 1 22.10.2008 13:12
utf8 Problem (Daten aus DB auslesen) go1denboy PHP Tipps 2008 1 23.09.2008 12:19
Problem mit swfobjects R4v3r JavaScript, Ajax und mehr 8 21.09.2008 14:17
Problem mit foren suche programmieren! litterauspirna PHP Tipps 2008 4 17.08.2008 12:17
Timestamp problem phrain PHP Tipps 2008 2 04.04.2008 09:41
Suche (MATCH) mit MYSQL ruferp Datenbanken 1 10.09.2007 22:06
MATCH .... AGAINST ... Problem Denise Datenbanken 4 21.03.2007 20:05
Problem mit den Fulltext Keys R4v3r Datenbanken 2 16.02.2007 12:41
Volltext-Suche Problem - 2 verschiedene Tabellen Datenbanken 1 18.09.2006 16:32
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
match against mehrere variablen, match against $_post php syntax

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:17 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum