Select mit Sub / Union Select

ScoRpleX

Grünschnabel
Hallo liebe Community,

ich habe mir mal folgenden SQL Befehl zusammengebaut:

PHP:
$query = " SELECT tab_name.text, tab_name.tab_name
                   FROM
                   (
                   SELECT text, 'comments' AS tab_name FROM comments
                   UNION
                   SELECT text, 'news' AS tab_name FROM news
                   ) tab_name
                   WHERE MATCH (tab_name.text) AGAINST ('".$search_string."')";

Als Fehlermeldung bekomme ich: Can't find FULLTEXT index matching the column list.
Beide Spalten, sowohl comments.text als auch news.text haben jedoch einen Fulltext Index!

Liegt der Fehler nun an meinem Sub / Union Select oder was könnte es sonst sein?

Liebe Grüße und danke für jede Hilfe
ScoRpleX
 
Kannst du vielleicht den Aufbau der Tabellen zeigen? Einfach die Tabelle exportieren (gehe jetzt mal von phpmyadmin aus) und uns dann das Posten was er dir anzeigt.
 
Aber selbstverständlich:

Code:
CREATE TABLE `news` (
  `news_id` int(15) NOT NULL auto_increment,
  `text` text collate latin1_german2_ci NOT NULL,
  `user_id` int(15) NOT NULL,
  PRIMARY KEY  (`news_id`),
  FULLTEXT KEY `suche_news` (`text`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=135;

CREATE TABLE `comments` (
  `comment_id` int(15) NOT NULL auto_increment,
  `news_id` int(15) NOT NULL,
  `text` text collate latin1_german2_ci NOT NULL,
  `user_id` int(15) NOT NULL,
  PRIMARY KEY  (`comment_id`),
  FULLTEXT KEY `suche_comment` (`text`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=67;

Hoffe das hilft bei der Fehlersuche weiter (es handelt sich lediglich um eine Testdatenbank ... daher nur minimale Anzahl an Spalten ;)).
 
Hm, das Problem scheint zu sein das du als Tabellenquelle eine Abfrage hast. Bei der aus der Abfrage resultierenden Tabelle gibt es aber den geforderten Index nicht. Dewegen klappt das nicht.
Nun ist die Frage wie kannst du das beheben. Versuche mal folgendes:
SQL:
SELECT tab_name.text, tab_name.tab_name
FROM
(
  SELECT text, 'comments' AS tab_name FROM comments
  WHERE MATCH (comments.text) AGAINST ('test')
  UNION
  SELECT text, 'news' AS tab_name FROM news
  WHERE MATCH (news.text) AGAINST ('test')
) tab_name
 
Moin ScoRpleX und ronaldo84,

BTW, was spricht gegen dieses Konstrukt?
Bzw. welchen erhöhten Nährwert hat das äußere SELECT?
....$query = "...
SQL:
SELECT text, 'comments' as tab_name  FROM comments
WHERE MATCH (comments.text) AGAINST ('".$search_string."')
     UNION
SELECT text, 'news' AS tab_name FROM news 
WHERE MATCH (news.text) AGAINST ('".$search_string."');

Gruss
Biber2
 
Zuletzt bearbeitet:
Zurück