php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.03.2009, 21:12  
Benutzer
 
Registriert seit: 25.02.2009
Beiträge: 58
Chinese befindet sich auf einem aufstrebenden Ast
Standard Synonymsuche (PHP - MYSQL)

Hey,
vorab ist zu sagen, dass ich eine kleine Suche habe und in der gerne eine nicht zu "komplizierte und übermäßige" Synonysuche integriert hätte.

Beispiel
Tabelle Woerter:

id|wort
1 Auto
2 Karre
3 Fahrzeug
4 Vehikel
5 PKW
6 Schlitten
7 Kiste
8 Karton
9 Box
10 Schachtel

Tabelle Zuordnung:

id|wortid|synonymid
1 1 2
2 1 3
3 1 4
4 1 5
5 1 6
6 1 7
7 3 4
8 7 8
9 7 9
10 7 10

So kann man erkennen, dass Kiste zwar ein Synonym für Auto ist, aber Auto nicht unbedingt als Synonym für Kiste zu verstehen ist.

Hiermit könnte ich das Synonym abfragen:
Code:
SELECT 
  w2.wort 
FROM 
  woerter w 
  INNER JOIN zuordnung wxw
    ON w.id IN(wxw.wortid,wxw.synonymid) 
  INNER JOIN worte w2
    ON w2.id IN(wxw.wortid,wxw.synonymid) 
WHERE 
  w.wort=@Mein_Suchwort
GROUP BY
w2.wort
Ist das so zu empfehlen oder würdet ihr trotzdem noch was ändern?

Letzes Problem bleibt, dass ich mir nicht genau erklären kann, wie ich das in die Suche mit einbauen kann, sodass wenn ich Auto suche auch im gleichen Atemzug die Ergebnisse der Synonyme aufgelistet werden.

Hier ist der Anfang vom Quelltext, wo die Suche anfängt
Eingabefeld:

PHP-Code:
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="get">
                   <div>
                    <input type="text" size="80" name="q" id="q"/>
                    <input type="submit" value="Suchen"/>
                    <div id="vorschlag"></div>
                   </div>
</form>
Anfang der Suche
PHP-Code:
if ($suche trim($_GET['q'])) {
     if (!
get_magic_quotes_gpc()) $suche addslashes($suche);
     if (
strlen($suche) > 50) die('Anfrage zu lang'); 

Vielen Dank,
Chinese

Geändert von Chinese (29.03.2009 um 21:16 Uhr).
Chinese ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 31.03.2009, 16:45  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Hallo,

da es sich dabei um eine (gerichtete) 1:n-Beziehung handelt, denke ich, dass es sich dabei um das einzig sinnvolle Schema handelt.
Ich verschiebe das aber mal du den Datenbanken.

Themenmoderation:
[→] Verschoben von PHP-Einsteiger
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 01.04.2009, 00:27  
Benutzer
 
Registriert seit: 25.02.2009
Beiträge: 58
Chinese befindet sich auf einem aufstrebenden Ast
Standard

Hey, entschuldige :P

so ich habe meinen Tabellenstruktur umgelegt - schaut übersichtlicher aus und ist auch einfacher, die joins versteh ich noch nicht ganz :P - und klappt soweit auch.
Nur, dass derzeit nur Suchergebnisse angezeigt werden, wenn die in der Tabelle Synonyme vorhanden sind.
Beispiel
Tabelle Synonyme
id | wort | synonym
1 | auto | 1
2 | karre | 1

Wenn ich "auto" suche, was normalerweise Suchergebnisse liefert, liefert es diesmal keine, allerdings ist es nicht so, wenn ich "karre" suche, da werden mir die Ergebnisse von "auto" geliefert. So wie es sein soll für das Synonym.

Hier ist der Code dazu noch einmal:
PHP-Code:
if ($suche trim($_GET['q'])) {                                
    require (
"verbindung.php");                                        // Aufbau der Verbindung zur Datenbank
    
    
    
$synonymabfrage "    SELECT wort
                         FROM `synonyme`
                        WHERE wort != '$suche'
                        AND (
                            synonym = (
                                SELECT synonym
                                FROM synonyme
                                WHERE wort = '$suche' )
                            OR id = (
                                SELECT synonym
                                FROM synonyme
                                WHERE wort = '$suche' )
                            OR synonym = (
                                SELECT id
                                FROM synonyme
                                WHERE wort = '$suche' )
                        )"
;
    
    
$ergebnis mysql_query($synonymabfrage);

    while (
$suche mysql_fetch_array($ergebnis) or die (mysql_error())) {
        
     if (!
get_magic_quotes_gpc()) $suche addslashes($suche);
     if (
strlen($suche) > 50) die('Anfrage zu lang');                // Länge der Buchstaben angeben

    
     
$sbs preg_split('/\s+/'$suche[0]);
     foreach (
$sbs as $sb) {
          
$sb preg_replace('/\W/'''$sb);
          if (
strlen($sb) >= 1$suchbegriffe[] = $sb;
     } 
Chinese ist offline   Mit Zitat antworten
Alt 03.04.2009, 23:20  
Benutzer
 
Registriert seit: 25.02.2009
Beiträge: 58
Chinese befindet sich auf einem aufstrebenden Ast
Standard

Hmm... hat keiner von euch klugen Köpfen eine Ahnung, wie ich weiter vorgehen könnte?

PHP-Code:
if ($suche trim($_GET['q'])) {
     if (!
get_magic_quotes_gpc()) $suche addslashes($suche);
     if (
strlen($suche) > 50) die('Anfrage zu lang');
     
    require(
'verbindung.php');
    
     
$synonymabfrage " SELECT wort
                        FROM `synonyme`
                        WHERE wort != '$suche[0]'
                        AND (
                              synonym = (
                                SELECT synonym
                                FROM synonyme
                                WHERE wort = '$suche[0]' )
                              OR id = (
                                SELECT synonym
                                FROM synonyme
                                    WHERE wort = '$suche' )
                              OR synonym = (
                                SELECT id
                                FROM synonyme
                                WHERE wort = '$suche[0]' )
                        )"
;                    
    
      
$ergebnis mysql_query($synonymabfrage);

      while (
$suche mysql_fetch_array($ergebnis) or die (mysql_error())) {
// Rest der Suche
// Ende der While ^ Schleife
// Ende der If-Schleife 
Mit diesem Code kann ich ein Synonym suchen, das in der Tabelle Synonyme vorhanden ist.
( id | wort | synonym
1 | auto | 1
2 | karre | 1
3 | 05 | 3
4 | 5 | 3)

Doch, das, was ich logischerweise gerne hätte, wäre, wenn $suche aus 2 Synonyme bestehen würde, (in diesem Beispiel könnte es "karre 5" sein und gefunden werden sollte "auto 05") dass das mit in das Suchergebnis mit einbezogen wird.

Kompliziert, aber ich hoffe, ihr könnt mir helfen.

Danke,
Chinese

Geändert von Chinese (03.04.2009 um 23:27 Uhr).
Chinese 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
MySQL Konsole und Umlaute unter Windows [LÖSUNG] f4ckm5 Datenbanken 8 30.03.2009 22:10
Problem bei Umstellung auf MySQL 5 bettina Datenbanken 13 21.01.2009 10:00
GUI-Tool kann sich nicht mit MySql verbinden KWitt72 PHP Tipps 2008 3 21.12.2008 16:56
[Erledigt] MySQL - ERROR 1044 bei erstellen einer Datenbank _youngenterpriser_ Datenbanken 2 05.02.2008 17:56
Mysql Server Einstellunen Optimieren pchero Datenbanken 3 01.05.2007 19:50
MySQL Abfrage von Ver. 5 für Ver 3. des MySQL Servers FireFIghter Datenbanken 3 02.02.2007 17:18
Kein Zugriff über ODBC mit der IP-Adresse auf MySql DB Datenbanken 4 09.02.2006 11:04
[Erledigt] Mysql 4.1.x unter php 4.3.9 Datenbanken 3 15.11.2005 13:49
Schnittstelle zwischen PHP und MySQL klappt net !!! Datenbanken 16 16.10.2005 14:24
[Erledigt] not allowed to connect to this MySQL server PHP Tipps 2005-2 2 23.09.2005 18:34
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
MYSQL läuft nur wenn /tmp auf 777 Datenbanken 5 06.07.2005 08:38
mysql root passwort vergessen Datenbanken 1 29.05.2005 11:33
Access denied for user: '@localhost' / SYSTEM@localhost Datenbanken 0 10.11.2004 20:35
[Erledigt] PHP5 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;a m p; MySQL Datenbanken 5 01.08.2004 05:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
synonysuche, php synonym database, synonym php mysql, php synonymsuche, synonym suche php, php synonym datenbank, php synonyme, php suchfunktion synonyme, synonym datenbank, php suche synonym, mysql synonymsuche, synonysucher, aufstrebender ast synonym, suchergebnisse synonyme, wort synonym php, suche synonym mysql, synonymdatenbank wiki, mysql php where suchen, synonyme mysql, mysql synonym datenbank

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:37 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