首页 > 解决方案 > PB / SQLite3 连接表

问题描述

我创建了 3 个表,我想要 3 个表的数据

T1

T2

T3

我搜索这些信息:n1t1、n2t1、n1t2、n1t3、n2t3

代码 :


$stmt = $db->prepare("SELECT t1.n1t1 AS t1_n1t1, t1.n2t1 AS t1_n2t1, t2.n1t2 AS t2_n1t2, t3.n1t3 AS t3_n1t3, t3.n2t3 AS t3_n2t3
    FROM t1
    INNER JOIN t3 ON t1.idt1 = t3.idt1
    INNER JOIN T2 ON T3.idt2 = T2.idt2
");

if ($result = $stmt->execute()) {
    $arr = $result->fetchArray();
    foreach ($arr as &$row) {
      echo "1 : " .  $row["t1_n1t1"] . "<br>";
      echo "2 : " .  $row["t1_n2t1"] . "<br>";
      echo "3 : " .  $row["t2_n1t2"] . "<br>";
      echo "4 : " .  $row["t3_n1t3"] . "<br>";
      echo "5 : " .  $row["t3_n2t3"] . "<br>";

    }
}

错误:我有显示的值(1:2)它会有所不同,并且在某些名称上出现错误 Warning: Illegal string offset,例如 n1T1 等。

我看到我在 t3 上的 idt1 和 idt2(外键)有一个列名:0

屏幕 :

屏幕表

我插入一个 example.csv :

n1t3;n2t3;n3t3;n4t3
123;n2a;n3a;n4a
456;n2b;n3b;n4b
789;n2c;n3c;n4c
456;n2d;n3d;n4d

代码:我将我的 FOREINGN KEY 添加到

if (($file = fopen('exemple.csv', 'r')) === FALSE)
    echo "SQLite 3 : error CSV";

$req = $db->exec("CREATE TABLE t3 (idt3 integer PRIMARY KEY AUTOINCREMENT, idt1 integer, idt2 integer, n1t3, n2t3, n3t3, n4t3 FOREIGN KEY(idT1) REFERENCES t1(idt1), FOREIGN KEY(idt2) REFERENCES t2(idt2))");

$req = $db->prepare("INSERT INTO t3 (idt1, idt2, n1t3, n2t3, n3t3, n4t3) VALUES (:idt1, :idt2, :n1t3, :n2t3, :n3t3, :n4t3)");
 
$idt1 = 0;
$idt2 = 0;

$req->bindValue(':idt1', $idt1++, SQLITE3_INTEGER);
$req->bindValue(':idt2', $idt2++, SQLITE3_INTEGER);
...

我已经退休了第一行,在 t1 和 t3 命名表进行测试

fgetcsv($file);

但总是相同的错误代码......

新屏幕表:

屏幕表格 v2

标签: phpsqlitejoin

解决方案


每当您将具有相同列名的表连接在一起时,您必须在列名前加上表名(或别名),最好只使用该语法作为默认语法,并始终在表名前加上列名(或别名)

<?php

$stmt = $db->prepare("SELECT T1.N1 AS T1_N1, T1.N2 AS T1_N2, T2.N1 AS T2_N1, T2.N2 AS T2_N2, T3.N1 AS T3_N1, T3.N2 AS T3_N2
    FROM T1
    INNER JOIN T3 ON T1.idT1 = T3.idT1
    INNER JOIN T2 ON T3.idT2 = T2.idT2
");

if ($result = $stmt->execute()) {
    $arr = $result->fetchArray();
    foreach ($arr as &$row) {
      echo "1 : " .  $row["T1_N1"] . "<br>";
      echo "2 : " .  $row["T1_N2"] . "<br>";
      echo "3 : " .  $row["T2_N1"] . "<br>";
      echo "4 : " .  $row["T2_N2"] . "<br>";
      echo "5 : " .  $row["T3_N1"] . "<br>";
      echo "6 : " .  $row["T3_N2"] . "<br>"; 

    }
}

推荐阅读