显示具有相同表和表字段名称的两个MYSQL数据库中的数据

时间:2016-07-22 11:48:33

标签: php mysql database mysqli

我想在一个表上显示两个数据库。它们是具有表@posts = Post.all @categories = Post.uniq.pluck(:category) @prompt = "Select Category" if params[:category] @posts = Post.where(category: params[:category]) @prompt = params[:category] end <%= form_tag(h_path, :method => "get") do %> <%= select_tag 'category', options_for_select(@categories), {onchange: "this.form.submit();", prompt: @prompt} %> <% end %> 的normalUser数据库和具有表users的admin数据库。由于它们是注册系统,因此它们具有相同的表字段。那是users。 问题,我想在表上显示它们的内容,并根据数据库名称包含它们的角色。 normalUser用于normalUser数据库,admin用于admin数据库。我想不到一个MYSQLI SELECT语句来实现这个,有人吗?谢谢。

user_id, user_name, user_email, user_pass, joining_date

2 个答案:

答案 0 :(得分:1)

您可以执行UNION,因为mysql允许在查询中指定数据库

  

您可以将默认数据库中的表称为tbl_name,或   as db_name.tbl_name以显式指定数据库。你可以参考   列为col_name,tbl_name.col_name或db_name.tbl_name.col_name。   您无需为a指定tbl_name或db_name.tbl_name前缀   列引用,除非引用不明确。见章节   10.2.1,“标识符限定符”,用于需要更明确的列引用表单的歧义的示例。

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

因此您的查询变为。

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

根据要求提供的其他信息进行更新。

不要打开与数据库的两个单独连接。打开一个连接但没有数据库名称参数。

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

将此连接用于此页面上的所有后续查询。这意味着您不必只是users而是必须在此页面上执行adm.usersnormaluser.users

我已更新上面的查询以反映实际的表名。

旁注: 尽量不要在网络应用中使用root帐户

答案 1 :(得分:0)

查看UNION operator

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

列名称和顺序必须相同。如果订单不同,则在SELECT子句(SELECT u.user_id, u.user_name...

中按相同顺序列出列