sql suche über 3 cols

ohio

Erfahrenes Mitglied
hallo zusam'n,

ich hab eine tabelle die wie folgt ausschaut ->

Code:
CREATE TABLE doku_data (
  DOCID int(11) NOT NULL auto_increment,
  name varchar(255) NOT NULL default '',
  schlagwoerter longtext NOT NULL,
  data longtext NOT NULL,
  create_timestamp timestamp(14) NOT NULL,
  update_timestamp timestamp(14) NOT NULL,
  create_userid int(5) NOT NULL default '0',
  update_userid int(5) NOT NULL default '0',
  PRIMARY KEY  (DOCID)
) TYPE=MyISAM COMMENT='document data';

nun möchte ich über ein suchformular ein paar wörter abfragen samt AND, OR, NOT zwischen den suchwörtern, alles in allem nich das problem, nur eines macht mir zu schaffen, wie frage ich die felder name, schlagwoerter und data mit einem sql befehl elegant ab?

falls noch unverständlich ist was ich meine, so ließe sich noch anfügen, dass alle drei felder in der tabelle am besten zusammengefügt würden und dann mit einer WHERE klausel abgefragt werden könnten, mit CONCAT() geht dat ja, nur auf das feld kann ich keine WHERE klausel anwenden.

sollte ich in diesem forum falsch sein so bitte ich um verschiebung.

mfg ohio
 
Hm, wieso sollte man ein Ergebnis von CONCAT nicht in einer WHERE-Klausel verwenden können? Kann das jetzt grad nicht testen, aber ich könnte schwören dass ich schon mal CONCAT o.ä. als Bedingung verwendet habe...
 
nun, ich schätze das CONCAT() nicht funktionieren will und er mir sagt -> DB Error: no such field

bei folgender query ->
Code:
SELECT *, CONCAT(name, ' ', schlagwoerter) AS a FROM doku_data WHERE a = "buha"

liegt daran, dass das die where klausel auf bestehende daten angewandt wird und nicht zur laufzeit hergestellte, warum kann ich mir auch nich erklären.... mysql 4.0.14 kanns jedenfalls nicht :(

aber vielleicht bekommt man das ja auf nem anderen wege hin...
 
hmm ich kann mir nicht vorstellen das du wirklich concat möchtes :-)

SELECT * FROM doku_data WHERE CONCAT(name, schlagwoerter) = "buha"

wenn name = "bu" und schlagwoerter = "ha" dann ausgabe
 
Genau, melmager, so ähnlich hab ich mir das vorgestellt... vielleicht eher so:

Code:
SELECT * FROM doku_data WHERE CONCAT(name, ' ', schlagwoerter) LIKE "%buha%"

Nachteil ist halt, dass du jedesmal diese CONCAT()-Anweisung schreiben musst, für jede weitere Bedingung (was ja mit möglichen AND, OR und NOT Suchoperatoren unvermeidbar sein wird...). Eine elegantere Lösung fällt mir allerdings jetzt auch nicht ein.
 
Zurück