【发布时间】:2013-10-20 16:42:11
【问题描述】:
我现在一直在磕磕绊绊。我有一个名为gears 的表,其中包含名称为:id、mid、cid 和installed 的行。我想搜索此表并以 csv 格式返回 mids 列表以获取一些独特的 cid。例如,如果cid = $cid 我可以使用:
$query = $database -> query("SELECT COUNT(mid), GROUP_CONCAT(mid) FROM gears WHERE cid=$cid", __LINE__, __FILE__);
$gears_installed = $database -> get_result($query);
$gears = $database -> get_result($query, 0, 1);
不用担心函数名称,它们的功能完全符合人们的预期。因此,如果该特定 $cid 有 3 行,mids:bank、lottery 和 post,则 $gears_installed 将等于 3,$gears 将等于 bank,lottery,post .这按预期工作。
现在谈谈我的问题。每个唯一的mid 都有自己的表,名为settings_mid_here。即,对于上述三个,我有表settings_bank、settings_lottery,最后是settings_post。这些表中的每一个也将有一个名为cid 的列(这就是两者的关联方式)。如何运行一个查询以从 cid=$cid 所在的每个表中返回整行?我不想对SELECT * FROM settings_bank WHERE cid=$cid 和SELECT * FROM settings_post WHERE cid=$cid 以及最后SELECT * FROM settings_post WHERE cid=$cid 运行单独的查询,因为这可能会导致一页加载时大约有10 个额外的查询(目前,有10 个不同的mids )。
如您所见,问题是动态的。它必须能够适应不同数量的mids,以某种方式区分每个表中的设置(例如settings_bank 可能有一个名称为name 的列,settings_post 也可能有)。最后,如果不存在对应于给定$cid 的行,它还必须能够返回默认行(非空值)。
一项复杂的任务,但我希望有人可以帮助我,因为我无法到达任何地方。
【问题讨论】:
-
我有一些想法,但我只能提供一些方案的转储和一些演示数据来测试查询。否则,它只是一个聪明的猜测。
-
您的意思是每次
mid出现在gears表中时,您都会创建一个新表? -
sqlfiddle.com/#!2/cc5ce/1 使用 cid=3
-
@geomagas
gears表可以多次包含特定的mid。gears表将为每个mid安装在一个cid帐户上,可以这么说。例如,每个mid都是一个小部件。 -
是的,但这不是我问的。假设我在
gears中添加了一行,其中包含以前不存在的mid='somewidget'。我也必须创建一个settings_somewidget表吗?