2016-11-03 7 views
1

thisトピックを参照してください。

私の問題は、PHP 5の列を使用してテーブルに挿入するのですが、そのうちの1つは別のテーブルへの外部キーです。だから、私はリンクディレクトリではなく、値を参照してください。例えばについて
等...彼らはID"1" とテーブル"クライアント" 列にに含まれている "4" Orders.Name
は、 "3"、 "2"、 "1" の値を含みます「名前」「ジャック」、ID「2」、「名前」が「マーク」、IDが「3」、「名前」が「フランク」...などである。だから、私は "ジャック"、 "1"ではないと思う。
2つのテーブルを持つPHPクエリ

例:
データベース名:DinamicoWeb
表名:受注
フィールド名:同上オード、オード日、名前、価格、総
第2のテーブル名:クライアント
フィールド名: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 
?> 

test.phpを

<?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(); 
?> 

ありがとう!

UPDATE:
私はクライアントと注文テーブル間の関係を持っています。

これはアクセスに関する私の質問です。 (別の名前と異なるリクエスト)

SELECT DISTINCT Ordini.[Id Ord], Ordini.[Tipo Ord] AS Tipo, Ordini.[N Ord] AS Numero, Ordini.[Data Ord] AS Data, Ordini.Anno, Anagrafica.CodAnag AS Codice, Ordini.[Ragione sociale], IIf([stato]=0,"inserito",IIf([stato]=1,"stampato","Bloccato")) AS [Stato ord], Ordini.[Data consegna] AS Consegna, Ordini.ValidoFinoAl AS Validità, [tabella pagamenti].Descrizione AS Pagamento, Ordini.Rif1 AS [Ns Riferimenti], Ordini.Rif2 AS [Vs Riferimenti], IIf(Not IsNull([idsped]),[anagrafica spedizioni].[Ragione Sociale] & " " & [anagrafica spedizioni].Indirizzo & " " & [anagrafica spedizioni].Località,IIf(Not IsNull(anagrafica_1.[id anag]),anagrafica_1.[Ragione Sociale] & " " & anagrafica_1.Indirizzo & " " & anagrafica_1.Località)) AS Destinazione, Ordini.TotImp, Ordini.TotNI, Ordini.Cambio, Temp_Ordini_Interroga.ApertoEuro, Temp_Ordini_Interroga.TotaleEuro, Ordini.Sospeso 
FROM ((((Ordini INNER JOIN Anagrafica ON Ordini.[Id anag] = Anagrafica.[Id anag]) INNER JOIN [tabella pagamenti] ON Ordini.[Id pagamento] = [tabella pagamenti].[Id pagamento]) LEFT JOIN [anagrafica spedizioni] ON (Ordini.DestSped = [anagrafica spedizioni].CodSped) AND (Ordini.Dest = [anagrafica spedizioni].[Id anag])) LEFT JOIN Anagrafica AS Anagrafica_1 ON Ordini.Dest = Anagrafica_1.[Id anag]) INNER JOIN Temp_Ordini_Interroga ON Ordini.[Id Ord] = Temp_Ordini_Interroga.IdOrd 
ORDER BY Ordini.Anno DESC , Ordini.[Data Ord] DESC , Ordini.[N Ord] DESC; 
+0

あなたは何ができるか、クライアントと順位表 –

+0

の間に何らかの関係が使用があなたのクエリにJOINをされているとの関係は受注となります。[名前]はクライアントを=。[IDオード] –

+0

@jaiduttはい、私は持っています。 –

答えて

0

私はあなたの質問を理解していれば、私は知らないが、私はあなたがたとえば、あなたのクエリを変更しようとすべきだと思う:

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] 
+1

私はこの解決策を試してもうまくいきません。メッセージ: '致命的なエラー:メッセージ' との予期しない例外 'com_exception'ソース: ODBCドライバーのMicrosoft OLE DBプロバイダー
説明: [Microsoft] [ドライバーODBC Microsoft Access] Parentesi non valide nel nome '[Clients.Id] '.' –

+0

多分このようなものです: 'code'Clients。[Id Client] =注文。[name]' code' – th3fr33man

+0

多分このようなものです: 'Clients。[Id Client] = Orders。[name]' – th3fr33man

0

この

をお試しください
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; 

:列の名前のスペースを削除します。

+1

私はこの解決策を試してみますが、うまくいきません。メッセージ: '致命的なエラー:メッセージ' との予期しない例外 'com_exception'ソース: ODBCドライバーのMicrosoft OLE DBプロバイダー
説明: [Microsoft] [ドライバーODBC Microsoft Access] Parentesi non valide nel nome '[Clients.Id] '.' –

+0

今すぐこのクエリを試してください –

+0

動作しません。正しいsintaxは 'Orders。[Name]'のようにsuggest @ th3fr33manですが、私が両方のコードを変更しても動作しません。 –

0

sqlと同じ名前を繰り返さないでください。また、列に名前を割り当てるときにスペースをとらないでください。単語の区切りにはアンダースコア(_)を使用します。

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

私はこのソリューションを試してみましたが、うまくいきません。メッセージ: '致命的なエラー:メッセージ' との予期しない例外 'com_exception'ソース: ODBCドライバーのMicrosoft OLE DBプロバイダー
説明: [Microsoft] [ドライバーODBC Microsoft Access] Parentesi non valide nel nome '[Clients.Id] '.' –

+0

あなたはこの方法では使用できません' [Clients.Id] '。これを '' Clients.Id''として使用してください。 –

+0

sql以上で動作するはずです。 Plsそれを確認 –

0

あなたはSQLリクエストでjoinを使用する必要があります。

例:この要求はc.name列でクライアントテーブルから該当する名前を選択します

Select o.idOrd, o.ordDate, c.name, o.price, o. totale 
From orders o 
join client c on c.idClient = o.Name 

Select orders.idOrd, orders.ordDate, client.name, orders.price, orders.totale 
From orders 
join client on client.idClient = orders.Name 

あなたはまた、テーブルの別名を使用することができます。

ordersテーブルの「名前」列の名前を「ClientId」と変更して、 とする必要があります。

+0

"Orders.Id ord"(スペース付き)と書いても動作しません。 PHPのすべての列の名前を変更するにはどうしたらいいですか? –

関連する問題