MySQL Join / Union problemchen

ohhho

Grünschnabel
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:

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:
Hallo,

du musst hier nicht unbedingt per JOIN vorgehen, obwohl es eventuell Sinn macht.

Du kannst per UNION auch die Ergebnisse unterschiedlicher Tabellen miteinander verbinden. Wichtig ist, dass die Anzahl der Ergebnisspalten pro Teilabfrage und der Datentyp der Spalten kompatibel sind.
Wenn die Anzahl nicht stimmt, kannst du mit Füllspalten arbeiten. Wenn der Datentyp nicht stimmt, kannst du mit expliziten Konvertierungen arbeiten.

Ich hab vor kurzem eine ähnliche Frage hier im Forum beantwortet, eventuell hilft Dir das dabei:

http://www.tutorials.de/forum/relat...79631-mit-union-tabellen-der-db-ausgeben.html

Markus
 
Zuletzt bearbeitet:
Sprich ich müsste die Datenbanken um link bei News und Downloads und Unterschrift bei Downloads und Artikeln erweitern und diese dann einfach leer lassen.
Super Idee für die Lösung des Problems.
Werde das nachher sofort ausprobieren, vielen Dank für die Idee.

Und welcher Typ es ist, ob News oder Download oder Artikel kann ich ja durch eine zusätzliche Spalte "typ" herausfinden...
 

Neue Beiträge

Zurück