MySql-Datenbank durchsuchen

Kalito

Erfahrenes Mitglied
Hallo,

ich habe eine Tabelle, wo die Mitgliederdaten stehen und neben dieser noch einige weitere Tabell für Projekte und Abteilungen und so. Ich muss es auf mehrere Tabellen aufsplitten, da es Mitglieder gibt, die in mehreren Tabellen sind bzw diese Daten sich recht schnell ändern. Nun will ich für jedes Mitglied eine art Profilseite erstellen. Aber um Arbeit zu sparen will ich eine Seite bauen, wo ich nur den Namen eingeben muss und ich dann alle Daten bekomme. Dahergehend müsste ich ja alle Tabellen durchsuchen, da ich nicht weiß, in welcher Tabelle das Mitglied ist.

Mein erster Gedanke war ja eine Art whileschleife oder so, der die Datenbank Tabelle für Tabelle abarbeitet und für jede Tabelle ein true oder false ausgibt, aber das scheint mir doch sehr Serverlastig zu sein.

Gibt es da eine bessere Methode?

Gruß
 
Hallo Kalito,
ja gibt es. Zauberwort JOIN ;) So sollte das ganze dann aussehen, natürlich ist es auch beliebig erweiterbar.
PHP:
$var = mysql_query("SELECT * FROM tableuser AS user
JOIN LEFT ( SELECT spalte FROM tableproject ) AS project
on ( user.UserId = project.UserID )") OR die (mysql_error());
So in der Art sieht das ganze aus.
Und wie gesagt kannst du das noch erweitern um deine anderen Tabellen noch einzubinden.

Mfg Splater
 
Das war auch mein Gedanke, aber ich weiß halt nicht wieviele Tabellen es werden bzw es wird sich schnell was ändern, sprich Tabellen kommen dazu, Tabellen gehen. So müsste ich ja von Hand alles nachtragen. Gibt es da was elerganteres?
 
UNION
SQL:
SELECT tablename
FROM
	(
		SELECT user, 'table1' AS tablename FROM table1
		UNION SELECT user, 'table2' AS tablename FROM table2
		UNION SELECT user, 'table3' AS tablename FROM table3
	) AS tables
WHERE
	user = '{$searchuser}';

Nachtrag:
Um herauszufinden wieviele Tabellen du hast, würde ich den user-Tabellen allen einen gewissen prefix geben. zB 'usr'. Dann kannst du so die Tabellen aus der DB auslesen und das obige Script in PHP mit einer Schleife zusammenstiefeln
SQL:
SELECT table_name 
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'Name deiner Datenbank'
AND table_name LIKE 'usr%'

Das könnt dan etwa so aussehen
PHP:
<?php
$dbname = 'test';
$prefix = 'usr';
$selects = array();

//Alle User-Tabellen suchen
$sql = "
SELECT table_name 
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = '{$dbname}'
AND table_name LIKE '{$usr}%'";

$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
    //Das SELECT-Statement für den UNION vorbereiten
    $selects[] = "SELECT DISTINCT user, '{$row[0]}' AS tablename FROM {$row[0]}";
}
mysql_free_resulr($selects);

//Alle Selectstatements mut UNION zu einem String verbinden
$sql = implode(' UNION ', $tables);
//SQL für die USersuche zusammensetzen
$sql = "
SELECT tablename
FROM   ({$sql}) AS tables
WHERE  user = '{$searchuser}'";

//Suchen in welchen Tabellen der User erfasst ist
$result = mysql_query($sql);

//TODO ide Tabellen duchtgehen und irgendwas damit machen

?>
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück