• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

PHP Function in MySQL abfrage

TecEye

New member
Also das Szenario, ich habe eine Art Mediathek, da kann man eigene Ordner einrichten aber es werden auch atomatisch Ordner angelegt wenn man zB ein Projekt anlegt oder einen User zsw.

in der tabele mediathek_folder ist eine spalte 'name' da kommt bei normalen Ornern ein einfacher plaintext name rein.
Bei automatisch generierten kommt sowas rein #projekte|786243ndoi3z4523dmx23u2893mt3

mit einer function showRealName($name) wird geprüft ob der erste buchstabe ein # ist, wenn ja dann wird gesplittet und in der datenbank 'projekte' nach dem code '786243ndoi3z4523dmx23u2893mt3' gesucht und dessen name zurückgegeben. Das hat den grund dass wenn ich das Projekt änder, auch gleich der name in der Mediathek umbenannt wird.

Jetzt will ich eine Suche für die Mediathek erstellen, mit den plaintextnamen ja kein Problem, aber wie schaff ich es nach in den namen zu suchen die eine php funktion erstmal zusammensuchen muss?
 
ich denke dass die suche sich dann die querverbindungen auch erst bauen muss. aber wieso speicherst du die namen nicht einfach mit in dem feld mit den pipe zeichen? ist doch nicht schlimm wenn man bei einer änderung zwei stellen ändern muss. hauptsache die suche ist schnell.
 
Hmmm, vielleicht stimmt auch etwas mit der Struktur nicht. Eigentlich würde ich sagen, dass benutzergenerierte und systemgenerierte Ordner nicht auf die selbe Stufe gehören. Dann kann man nämlich auf die benutzergenerierten schonmal ganz normal die DB-Suche drauf setzen.
Und bei den systemgenerierten fehlt dir m.E. noch ein Feld. Entweder bei der Hinverknüpfung "vorne" oder bei der Rückverknüpfung "hinten".
Aber vielleicht wissen wir auch zu wenig, um uns da tiefer rein zu versetzen.
 
Du musst deine Suche gestaffelt aufbauen. Die normalen Ordner suchst du ganz normal und die Projektordner suchst du indirekt über deine Projekttabelle:
Code:
SELECT *
	FROM `mediathek_folder`
	WHERE `name` like ? OR `name` in (
		SELECT CONCAT('#projekte|', `code`)
			FROM `projekte`
			WHERE `name` like ?
	)
- ungetestet
 
nee leider noch nicht, das kommt dabei raus, aber ich sehe dann nicht die verbindung zu code

(LOWER(name) LIKE '%k%' OR LOWER(name) IN ( SELECT CONCAT('#apiprojekt|', 'code') FROM 819122_api_projekte WHERE LOWER(name) LIKE '%k%' ))

PHP:
$suchsql	= "(".$suchsql." OR ".$suchatr." IN ( SELECT CONCAT('#apiprojekt|', 'code') FROM ".$editorga."_api_projekte WHERE ".$suchatr." LIKE '%".$suchmuster."%' ))";

die $suchsql beinhaltet die bisherige suche in der das $suchmuster bei leerzeichen explodet wurde und einzeln abgesucht wird
$suchatr ist hier LOWER(name)
$editorga die zu behandelnde ORGA-Nr
 
Zurück
Oben