我想复制几个网站并将其内容合并到一个网站,类似于维基百科。我需要查询许多不同的表,这些表会变得草率。所以我想给每个表赋予$ Site和$ Section的唯一值。
一种策略是创建一个简单的脚本来查询每个表中的单个字段,如...
$stm = $pdo->prepare("SELECT GS.URL
FROM gs_world GS
WHERE GS.URL = :MyURL
UNION ALL
SELECT G.URL FROM gw2_pol G
WHERE G.URL = :MyURL");
$stm->execute(array(
'MyURL'=>$MyURL,
));
然后我需要以某种方式修改查询,以便为每个表提供$ Site和$ Section的唯一值,如下所示:
$stm = $pdo->prepare("SELECT GS.URL, $Site AS 'GS', $Section AS 'World'
FROM gs_world GS
WHERE GS.URL = :MyURL
UNION ALL
SELECT G.URL FROM gw2_pol G, $Site AS 'GW', $Section AS 'World'
WHERE G.URL = :MyURL");
$stm->execute(array(
'MyURL'=>$MyURL,
));
不是创建一个巨大的,绝望的复杂查询来提取其他值,而是可以进行自定义查询,放在交换机内......
switch($MySection)
{
case 'World':
[query]
break;
default:
break;
}
无论如何,任何人都可以告诉我如何给每个表一个$ Site和$ Section的默认值,即使这两个表都没有包含这些值的字段?
知道了。这就是我认为完整的解决方案看起来像......
$stm = $pdo->prepare("SELECT GS.URL, 'GS' as Site, 'World' as Section
FROM gs_world GS
WHERE GS.URL = :MyURL
UNION ALL
SELECT G.URL, 'GW' as Site, 'World' as Section
FROM gw2_pol G
WHERE G.URL = :MyURL");
$stm->execute(array(
));
while ($row = $stm->fetch())
{
$Site = $row['Site'];
$Section = $row['Section'];
}
我现在可以使用上述值来进行更详细的查询...
switch($Section)
{
case 'World':
// INNER SWITCH
switch($Site)
{
case 'GS':
// [query the table gs_world]
break;
default:
// [detailed query of gw2_pol]
break;
}
// END INNER SWITCH
break;
default:
break;
}
答案 0 :(得分:1)
我认为您想要的查询只是略微修改了您的内容:
$site
我不确定变量$section
和import java.sql.*;
public class database{
Connection dbCon;
Statement statement;
ResultSet result;
public database(){
connect();
}
public void connect(){
try{
String Driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(Driver);
String Sdb = "jdbc:odbc:students";
dbCon = DriverManager.getConnection(Sdb);
statement = dbCon.createStatement();
String sqlQuery = "SELECT * FROM StudentInfo";
result = statement.executeQuery(sqlQuery);
while(result.next()) {
//String name = result.getString("Studentname");
System.out.println(result.getString("Studentname"));
}
}catch(Exception ex){
}
}
public static void main(String[] args) {
System.out.println("**ACCESS DB CONNECTION**");
new database();
}
}
应该是什么。
答案 1 :(得分:1)
您需要提供要返回的值,可以是文字,也可以是绑定变量。
在UNION ALL
(或UNION
)查询中,列名由第一个查询定义。因此,您不能将结果集中列的名称用作鉴别器。要告诉哪个查询返回了一行,您需要在每个查询中使用不同的值。
此外,PDO在语句中多次重用绑定参数存在问题。这不起作用。 (至少,它以前没有用过......在以后的PDO版本中,行为可能已经改变了。)
$sql = "SELECT GS.URL
, :gs_site AS `site`
, :gs_section AS `section`
FROM gs_world GS
WHERE GS.URL = :gs_MyURL
UNION ALL
SELECT G.URL
, :g_site AS `site`
, :g_section AS `section`
FROM gw2_pol G
WHERE G.URL = :g_MyURL ";
$params = array(
':gs_MyURL' => $MyURL,
':gs_site' => 'GS',
':gs_section' => 'World',
':g_MyURL' => $MyURL,
':g_site' => 'GW',
':g_section' => 'World'
);
$stmt->prepare($sql);
$stmt->execute($params);
如果您不想将鉴别器值作为绑定值传递,您可以将文字硬编码到SQL文本中,代替绑定占位符,例如。
$sql = "SELECT GS.URL
, 'GS' AS `site`
, 'World' AS `section`
FROM gs_world GS
... ";