2016-07-22 2 views
-1

Ich habe zwei Datenbanken, die ich in einer Tabelle anzeigen möchte. Sie sind normale Benutzerdatenbank mit Tabelle users und Verwaltungsdatenbank mit Tabelle users. Da es sich um Anmeldesysteme handelt, haben sie dieselben Tabellenfelder. Das ist user_id, user_name, user_email, user_pass, joining_date. Frage: Ich möchte ihren Inhalt in einer Tabelle anzeigen und ihre Rollen basierend auf dem Datenbanknamen einschließen. normalUser für normaleUser-Datenbank und Administratorrolle für Admin-Datenbank. Ich kann mir keine MYSQLI SELECT-Anweisung vorstellen, um das zu erreichen, irgendjemand? Vielen Dank.Anzeigen von Daten aus zwei MYSQL-Datenbanken mit denselben Tabellen- und Tabellenfeldnamen

//admin database 
$servername = "localhost"; 
$username = "root"; 
$password = "ub435!"; 
$dbname = "adm"; 

// Create connection 
$con = new mysqli($servername, $username, $password, $dbname); 

//normal user database 
$servername = "localhost"; 
$username = "root"; 
$password = "ub435!"; 
$dbname = "normaluser"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 


$sql = "SELECT * FROM users ORDER BY joining_date DESC"; 
$result = $conn->query($sql); 
if ($result->num_rows > 0) { 

    echo " <table><tr><th>ID</th><th>User Name</th> 
<th>Email</th><th>Password</th><th>Joining Date</th> 
</tr>"; 

    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "<tr>"; 

echo '<td>' . $row['user_id'] . '</td>'; 

echo '<td>' . $row['user_name'] . '</td>'; 

echo '<td>' . $row['user_email'] . '</td>'; 

echo '<td>' . $row['user_pass'] . '</td>'; 

echo '<td>' . $row['joining_date'] . '</td>'; 
echo "</tr>"; 
} 

echo "</table>"; 
} else { 
echo "You have no Users."; 
} 
+0

können Sie nicht nur eine Spalte oder eine Tabelle machen, die sagt, welche Berechtigung/Rolle ein Benutzer hat? Es scheint ein wenig übertrieben, was Sie versuchen, vielleicht weil ich nicht ganz verstehe, was Ihre Ziele sind. – Nytrix

+0

Wie bekomme ich die Datenbank in einer Tabellenspalte für die Rolle? – bmm

Antwort

1

Sie eine UNION tun kann, weil mysql eine Datenbank in einer Abfrage

angegeben werden können

Sie auf eine Tabelle in der Standarddatenbank als tbl_name oder als db_name.tbl_name angeben beziehen eine Datenbank explizit. Sie können sich auf eine Spalte als col_name, tbl_name.col_name oder db_name.tbl_name.col_name beziehen. Sie müssen für eine Spaltenreferenz kein Präfix tbl_name oder db_name.tbl_name angeben, es sei denn, die Referenz wäre mehrdeutig. Unter Abschnitt 10.2.1, "Identifier Qualifiers", finden Sie Beispiele für Mehrdeutigkeiten, die explizitere Spaltenreferenzformen erfordern.

Quelle: http://dev.mysql.com/doc/refman/5.7/en/select.html

So Ihre Abfrage wird.

SELECT adm.users.*, 'admin' as role FROM adm.users 
UNION 
SELECT normaluser.users.*, 'simple' as role FROM normaluser.users 
ORDER BY joining_date DESC" 

Update basierend auf zusätzlichen Informationen angefordert.

Öffnen Sie nicht zwei separate Verbindungen zu den Datenbanken. Öffnen Sie eine Verbindung ohne den Parameter für den Datenbanknamen.

$con = new mysqli($servername, $username, $password); 

Verwenden Sie diese Verbindung für alle nachfolgenden Abfragen auf dieser Seite. das bedeutet, anstatt nur users müssten Sie entweder adm.users oder normaluser.users alle auf dieser Seite tun.

Ich habe die obige Abfrage aktualisiert, um tatsächliche Tabellennamen widerzuspiegeln.

Randbemerkung: Versuchen Sie nicht den Root-Account in Web-Anwendungen zu verwenden

+0

Ich habe zwei Datenbanken: '$ dbname =" fundblogin "; $ conn = new mysqli ($ Servername, $ Benutzername, $ Passwort, $ Datenbankname); sterben ($ conn-> connect_error); $ dbname = "funadmindb"; $ con = new mysqli ($ servername, $ benutzername, $ password, $ dbname); 'Wie füge ich dasselbe in die Union ein? Freundlich. – bmm

+0

Bitte fügen Sie dies als Teil der Frage hinzu. Eine Frage zu ändern, nachdem sie beantwortet wurde, ist auf SO verpönt (zB http://meta.stackoverflow.com/questions/253762/link-for-poor-or-jever-growing-questions-to-better-explain- why-people-stop-answer) Ich werde jedoch Ihre Anfrage bearbeiten und meine Antwort bearbeiten, sobald die Frage aktualisiert wurde. – e4c5

+0

Fertig Ich habe aufgenommen. Sorry – bmm

0

Werfen Sie einen Blick auf die UNION operator

SELECT *, 'normal' AS role FROM normalUser.users u 
UNION 
SELECT *, 'admin AS role FROM admin.users a 

Die Spaltennamen und um die gleiche sein muss. Wenn die Bestellungen unterschiedlich sind, dann listen Sie die Spalten in der gleichen Reihenfolge in der -Klausel (SELECT u.user_id, u.user_name...)

+0

Ich habe zwei Datenbanken: '$ dbname =" fundblogin "; $ conn = new mysqli ($ Servername, $ Benutzername, $ Passwort, $ Datenbankname); sterben ($ conn-> connect_error); $ dbname = "funadmindb"; $ con = new mysqli ($ servername, $ benutzername, $ password, $ dbname); 'Wie füge ich dasselbe in die Union ein? Freundlich. – bmm