Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有两个表的PHP查询_Php_Sql_Ms Access - Fatal编程技术网

带有两个表的PHP查询

带有两个表的PHP查询,php,sql,ms-access,Php,Sql,Ms Access,关于主题 我的问题是,我使用PHP5列插入到一个表中,但其中一列是另一个表的外键。因此,我将看到值,而不是链接目录 例如,订单。名称包含值“1”、“2”、“3”、“4”等。。。它们包含在表“Clients”中,在ID为的列中名称为“Jack”,ID为“2”,名称为“Mark”,ID为“3”,名称为“Frank”。。。等等所以,我想看“杰克”,而不是“1”。 示例: 数据库名称:DinamicoWeb 表名:订单 字段名称:Id Ord、Ord日期、名称、价格、总计 第二个表名:客户端 字段名称:

关于主题

我的问题是,我使用PHP5列插入到一个表中,但其中一列是另一个表的外键。因此,我将看到值,而不是链接目录
例如,订单。名称包含值“1”、“2”、“3”、“4”等。。。它们包含在表“Clients”中,在ID为的列中名称为“Jack”,ID为“2”,名称为“Mark”,ID为“3”,名称为“Frank”。。。等等所以,我想看“杰克”,而不是“1”。

示例:
数据库名称:DinamicoWeb
表名:订单
字段名称:Id Ord、Ord日期、名称、价格、总计 第二个表名:客户端
字段名称:Id客户端、名称、单元格、城市、地址

我的实际结果是:

Id Ord   Ord Date    Name    Price    Totale
   1      14/2/99     1       189       345

Id Client   Name       Cell        City       Street
    1       Jack      23445456    Italy      Road nr 2
我的愿望是:

Id Ord   Ord Date    Name    Price    Totale
   1      14/2/99    Jack     189       345
这是我的代码。

config.php

<?php
define ('DBNAME',"./DinamicoWeb.mdb"); // Database name
define ('DBTBL',"Orders"); // Table name 1
define ('PKNAME',"Id Ord"); // Primary Key
define ('PKCOL',0); // Position Primary Key
define ('LINKPK',true); // PK link for edit/delete
?>
<?php
require_once("config.php");

$cn = new COM("ADODB.Connection");
$cnStr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".
            realpath(DBNAME).";";
$cn->open($cnStr);
$rs = $cn->execute("SELECT [Id Ord] AS [ID], [Ord Date] AS [Date], [Name] AS [Name], [Price] AS [Price], [Total] AS [TOTAL] FROM [Orders]");
$numFields = $rs->Fields->count;

// Print HTML
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
echo '<html xmlns="http://www.w3.org/1999/xhtml">';
echo '<head>';
echo '<meta http-equiv="Content-Type" 
     content="text/html; charset=utf-8" />';
echo '<title>Gestione degli '.DBTBL.'</title>';
echo '<link href="styles.css" rel="stylesheet" type="text/css" />';
echo '<link rel="stylesheet" href="css/bootstrap.css">';
echo '<link rel="stylesheet" href="css/footable.bootstrap.css">';
echo '<link rel="stylesheet" href="css/footable.bootstrap.min.css">';
echo '<link rel="stylesheet" href="css/footable.core.bootstrap.min.css">';
echo '</head><body>';
echo '<h1>GESTIONE '.DBTBL.'</h1>';
// Elenca records -----
//echo ("<div class='table-responsive'>");
echo ("<table class='datatable table tabella_reponsive ui-responsive' summary='Prova dati con MS Access'>");
echo("<caption>Tabella ".DBTBL."</caption>\n");
echo("<thead><tr>\n");
for ($i=0;$i<$numFields;$i++){
    echo("<th scope='col'>");
    echo $rs->Fields($i)->name;
    echo("</th>\n");
}
echo("</tr></thead>\n");
echo("<tbody>");

$alt = false;
while (!$rs->EOF)
{
    echo("<tr>");
    for ($i=0;$i<$numFields;$i++){
      $altClass = $alt ? " class='alt'" : "";
      if (LINKPK && $i==PKCOL){
        echo "<td".$altClass."><a href='?id=".$rs->Fields($i)->value
              ."'>".$rs->Fields($i)->value."</a></td>\n";
      }
      else{
        echo "<td".$altClass.">".$rs->Fields($i)->value."</td>\n";
      }
    }
    echo("</tr>\n");    
    $rs->MoveNext();
    $alt = !$alt;
}
echo("</tbody>");
echo("</table>\n");
echo("</div>");
echo '<script src="js/footable.js"></script>';
echo '<script src="js/footable.min.js"></script>';
}
echo '</body></html>';
$rs->Close();
$cn->Close();
?>

我不知道我是否理解您的问题,但我认为您应该尝试更改您的查询,例如:

SELECT [Id Ord] AS [ID], [Ord Date] AS [Date], [Clients.name] AS [Name], [Price] AS [Price], [Total] AS [TOTAL] FROM [Orders] LEFT JOIN [Clients] ON [Clients.id]=[Orders.name]

我不知道我是否理解您的问题,但我认为您应该尝试更改您的查询,例如:

SELECT [Id Ord] AS [ID], [Ord Date] AS [Date], [Clients.name] AS [Name], [Price] AS [Price], [Total] AS [TOTAL] FROM [Orders] LEFT JOIN [Clients] ON [Clients.id]=[Orders.name]
试试这个

SELECT 
    [Orders.Id Ord] AS [ID], [Orders.Ord Date] AS [Date], 
    [Clients.Name] AS [Name], [Orders.Price] AS [Price], 
    [Orders.Total] AS [TOTAL] 
FROM 
    [Orders] 
JOIN
    Clients ON Orders.name = clients.client id;
注意:删除列名中的空格。

试试这个

SELECT 
    [Orders.Id Ord] AS [ID], [Orders.Ord Date] AS [Date], 
    [Clients.Name] AS [Name], [Orders.Price] AS [Price], 
    [Orders.Total] AS [TOTAL] 
FROM 
    [Orders] 
JOIN
    Clients ON Orders.name = clients.client id;

注意:删除列名中的空格。

不要重复与sql中相同的名称。为列指定名称时也不要保留空格。使用下划线(_)分隔单词

SELECT [Id Ord] AS [ID], [Ord Date] AS [Date], [Name] , [Price], [Total] 
FROM [Orders],[Clients]
WHERE [Orders.Name]=[Clients.Id];

不要重复与sql中相同的名称。为列指定名称时也不要保留空格。使用下划线(_)分隔单词

SELECT [Id Ord] AS [ID], [Ord Date] AS [Date], [Name] , [Price], [Total] 
FROM [Orders],[Clients]
WHERE [Orders.Name]=[Clients.Id];

您必须在sql请求中使用join

例如:

Select orders.idOrd, orders.ordDate, client.name, orders.price, orders.totale 
From orders
join client on client.idClient = orders.Name 
您还可以将表的别名用作:

Select o.idOrd, o.ordDate, c.name, o.price, o. totale
From orders o
join client c on c.idClient = o.Name
此请求将从c.name列中的client表中选择相应的名称

您应该将orders表中的“name”列重命名为“ClientId”,以便
连贯性。

您必须在sql请求中使用join

例如:

Select orders.idOrd, orders.ordDate, client.name, orders.price, orders.totale 
From orders
join client on client.idClient = orders.Name 
您还可以将表的别名用作:

Select o.idOrd, o.ordDate, c.name, o.price, o. totale
From orders o
join client c on c.idClient = o.Name
此请求将从c.name列中的client表中选择相应的名称

您应该将orders表中的“name”列重命名为“ClientId”,以便


连贯性。

客户机和订单表之间存在某种关系。您可以在查询中使用JOIN,这种关系就是订单。[Name]=客户机。[Id Ord]@jaidutt是的,我有。@bagiak您可以检查我的答案正确的sintax是
订单。[Name]
客户机和订单表之间存在某种关系您可以在查询中使用JOIN,这种关系就是订单。[Name]=Clients。[Id Ord]@jaidutt是的,我有。@bagiak您可以检查我的答案正确的sintax是
订单。[Name]
我尝试了这个解决方案,但不起作用。消息:
致命错误:未捕获异常“com_exception”,消息为“来源:用于ODBC驱动程序的Microsoft OLE DB提供程序”
描述:[Microsoft][Driver ODBC Microsoft Access]Parentesi non-valide nel nome'[Clients.Id].
可能类似这样的内容:
代码
客户端。[Id Client]=Orders.[name]
code
可能是这样的:
Clients.[Id Client]=Orders.[name]
在所选字段中,
Clients.[name]作为[name]
我更改了代码,现在编辑器和最终页面上没有错误。但它不起作用,我不知道原因。我尝试了这个解决方案,但不起作用。消息:
致命错误:未捕获异常“com_exception”,消息为“来源:用于ODBC驱动程序的Microsoft OLE DB提供程序”
描述:[Microsoft][Driver ODBC Microsoft Access]Parentesi non-valide nel nome'[Clients.Id].
可能类似这样的内容:
代码
客户端。[Id Client]=Orders.[name]
code
可能是这样的:
Clients.[Id Client]=Orders.[name]
在所选字段中,
Clients.[name]作为[name]
我更改了代码,现在编辑器和最终页面上没有错误。但它不起作用,我不知道原因。我尝试了这个解决方案,但不起作用。消息:
致命错误:未捕获异常“com_exception”,消息为“来源:用于ODBC驱动程序的Microsoft OLE DB提供程序”
说明:[Microsoft][Driver ODBC Microsoft Access]Parentesi非有效名称“[Clients.Id]”。
不起作用。正确的方法是
Orders.[Name]
像suggest@th3fr33man,但是如果我更改这两个代码,它们都不起作用。我尝试了这个解决方案,但都不起作用。消息:
致命错误:未捕获异常“com_exception”,消息为“来源:用于ODBC驱动程序的Microsoft OLE DB提供程序”
说明:[Microsoft][Driver ODBC Microsoft Access]Parentesi非有效名称“[Clients.Id]”。
不起作用。正确的方法是
Orders.[Name]
像suggest@th3fr33man,但是如果我更改这两个代码,它们都不起作用。我尝试了这个解决方案,但都不起作用。消息:
致命错误:未捕获异常“com_exception”,消息为“来源:用于ODBC驱动程序的Microsoft OLE DB提供程序”
描述:[Microsoft][Driver ODBC Microsoft Access]Parentesi非有效名称“[Clients.Id]”。
您不能以这种方式使用“[Clients.Id]”。将其用作
Clients.Id
我已经尝试过了。消息:
致命错误:查询“Clients.Id=Orders.Name”中出现未捕获的异常“com_exception”,消息为“Source:Microsoft OLE DB Provider for ODBC驱动程序”
说明:[Microsoft][Driver ODBC Microsoft Access]语法错误(缺少运算符)
这是什么“Clients.Id=Orders.Id”?复制错误时我出错,现在我编辑了最后一条评论,对不起。我不能使用
Clients.Id-Client我尝试了此解决方案,但不起作用。消息:
致命错误:未捕获异常“com_exception”,消息为“来源:用于ODBC驱动程序的Microsoft OLE DB提供程序”
描述:[Microsoft][Driver ODBC Microsoft Access]Parentesi非有效名称“[Clients.Id]”。
您不能以这种方式使用“[Clients.Id]”。将其用作
Clients.Id
我已经尝试过了。消息:
致命错误: