我想在一个表上显示两个数据库。它们是具有表@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
答案 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.users
或normaluser.users
。
我已更新上面的查询以反映实际的表名。
旁注: 尽量不要在网络应用中使用root帐户
答案 1 :(得分:0)
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...
)