Hallo ihr,
ich habe ein paar Fragen. Ich habe mehrere Tabellen mit verschiedenen Feldern und verschiedenen Namen, anschaulich s. Ende des Postings.
Nun möchte ich diese durchsuchen und zwar per Volltextsuche alle auf einmal. Per Union kann ich nur gleiche Felder durchsuchen, sprich Felder mit gleichem Namen.
Wie müsste ich bei JOIN vorgehen?
Bisher habe ich die News einzeln durchsucht:
oder die Artikel einzeln:
Dies möchte ich nun kombinieren.
Das funktioniert, jedoch fehlen mir Felder & ich müsste herausbekommen, aus welcher Tabelle der Datensatz stammt.
Also: Wie vorgehen. Die Relevanz ist nett, aber kein Muss, falls jemand einen Vorschlag ohne diese haben sollte.
Ich weiß echt nicht wirklich weiter und bin mit meinem geringen MySQL Schatz am Ende. Bitte verweist auch nicht stumpf auf die MySQL-Manual, die Kapitel zur Suche und zu UNION habe ich mir bereits durchgelesen.
Viele liebe Grüße,
ohhho
PS: Die Seite ist noch nicht ganz fertig, sodass auch noch etwas größere Datenbankänderungen möglich wären, falls diese notwendig sind.
ich habe ein paar Fragen. Ich habe mehrere Tabellen mit verschiedenen Feldern und verschiedenen Namen, anschaulich s. Ende des Postings.
Nun möchte ich diese durchsuchen und zwar per Volltextsuche alle auf einmal. Per Union kann ich nur gleiche Felder durchsuchen, sprich Felder mit gleichem Namen.
Wie müsste ich bei JOIN vorgehen?
Bisher habe ich die News einzeln durchsucht:
PHP:
$result = mysql_query("SELECT id, titel, unterschrift, kategorie, datum, MATCH (titel, unterschrift, inhalt) AGAINST ('".mysql_real_escape_string($_GET['q'])."' IN BOOLEAN MODE) AS relevanz FROM news WHERE MATCH (titel, unterschrift, inhalt) AGAINST ('".mysql_real_escape_string($_GET['q'])."' IN BOOLEAN MODE) ORDER BY MATCH (titel, unterschrift, inhalt) AGAINST ('".mysql_real_escape_string($_GET['q'])."' IN BOOLEAN MODE) DESC") or die(mysql_error());
oder die Artikel einzeln:
PHP:
$result = mysql_query("SELECT id, titel, link, inhalt, datum, kategorie, MATCH (titel, inhalt) AGAINST ('".mysql_real_escape_string($_GET['q'])."' IN BOOLEAN MODE) AS relevanz FROM artikel WHERE MATCH (titel, inhalt) AGAINST ('".mysql_real_escape_string($_GET['q'])."' IN BOOLEAN MODE) ORDER BY MATCH (titel, inhalt) AGAINST ('".mysql_real_escape_string($_GET['q'])."' IN BOOLEAN MODE) DESC") or die(mysql_error());
Dies möchte ich nun kombinieren.
PHP:
$result = mysql_query("(SELECT id, titel, inhalt, kategorie, datum, MATCH (titel, inhalt) AGAINST ('".mysql_real_escape_string($_GET['q'])."' IN BOOLEAN MODE) AS relevanz FROM news WHERE MATCH (titel, inhalt) AGAINST ('".mysql_real_escape_string($_GET['q'])."' IN BOOLEAN MODE)) UNION ALL (SELECT id, titel, inhalt, kategorie, datum, MATCH (titel, inhalt) AGAINST ('".mysql_real_escape_string($_GET['q'])."' IN BOOLEAN MODE) AS relevanz FROM artikel WHERE MATCH (titel, inhalt) AGAINST ('".mysql_real_escape_string($_GET['q'])."' IN BOOLEAN MODE)) ORDER BY MATCH (titel, inhalt) AGAINST ('".mysql_real_escape_string($_GET['q'])."' IN BOOLEAN MODE) DESC LIMIT 2") or die(mysql_error());
Das funktioniert, jedoch fehlen mir Felder & ich müsste herausbekommen, aus welcher Tabelle der Datensatz stammt.
Also: Wie vorgehen. Die Relevanz ist nett, aber kein Muss, falls jemand einen Vorschlag ohne diese haben sollte.
Ich weiß echt nicht wirklich weiter und bin mit meinem geringen MySQL Schatz am Ende. Bitte verweist auch nicht stumpf auf die MySQL-Manual, die Kapitel zur Suche und zu UNION habe ich mir bereits durchgelesen.
Viele liebe Grüße,
ohhho
PHP:
CREATE TABLE `artikel` (
`id` int(11) NOT NULL auto_increment,
`titel` varchar(64) NOT NULL default '',
`link` varchar(80) NOT NULL default '',
`inhalt` longtext NOT NULL,
`datum` varchar(11) NOT NULL default '',
`kategorie` varchar(11) NOT NULL default '',
PRIMARY KEY (`id`),
FULLTEXT KEY `titel` (`titel`,`inhalt`)
) TYPE=MyISAM AUTO_INCREMENT=2 AUTO_INCREMENT=2 ;
CREATE TABLE `downloads` (
`id` int(11) NOT NULL auto_increment,
`titel` varchar(80) NOT NULL default '',
`inhalt` longtext NOT NULL,
`datum` varchar(11) NOT NULL default '',
`kategorie` varchar(11) NOT NULL default '',
`groesse` varchar(20) NOT NULL default '',
PRIMARY KEY (`id`),
FULLTEXT KEY `titel` (`titel`,`inhalt`)
) TYPE=MyISAM AUTO_INCREMENT=4 AUTO_INCREMENT=4 ;
CREATE TABLE `news` (
`id` int(11) NOT NULL auto_increment,
`titel` varchar(80) NOT NULL default '',
`unterschrift` text NOT NULL,
`inhalt` longtext NOT NULL,
`datum` varchar(11) NOT NULL default '',
`kommentare` varchar(11) NOT NULL default '',
`kategorie` varchar(11) NOT NULL default '',
`autor` varchar(11) NOT NULL default '',
PRIMARY KEY (`id`),
FULLTEXT KEY `titel` (`titel`,`unterschrift`,`inhalt`)
) TYPE=MyISAM AUTO_INCREMENT=6 AUTO_INCREMENT=6 ;
PS: Die Seite ist noch nicht ganz fertig, sodass auch noch etwas größere Datenbankänderungen möglich wären, falls diese notwendig sind.
Zuletzt bearbeitet: