PB / SQLite3 ПРИСОЕДИНЯЙТЕСЬ К ТАБЛИЦАМ - PullRequest
0 голосов
/ 08 июля 2020

Я создал 3 таблицы, и мне нужны данные из 3

T1

  • idt1 - ПЕРВИЧНЫЙ КЛЮЧ
  • n1t1
  • n2t1

T2

  • idt2 - ПЕРВИЧНЫЙ КЛЮЧ
  • n1t2
  • n2t2

T3

  • idt3
  • idt1 - ИНОСТРАННЫЙ КЛЮЧ
  • idt2 - ИНОСТРАННЫЙ КЛЮЧ
  • n1t3
  • n2t3
  • n3t3
  • n4t3

Я ищу эту информацию: 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 и т. Д.

Я вижу, что мои idt1 и idt2 (FOREIGN KEY) на t3 имеют имя столбца: 0

Экран:

таблицы экранов

Я вставляю с примером .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

1 Ответ

0 голосов
/ 08 июля 2020

всякий раз, когда вы объединяете таблицы с одним и тем же именем столбца в каждой, вы должны префикс имени столбца с именем таблицы (или псевдонимом), рекомендуется просто использовать этот синтаксис как значение по умолчанию и ВСЕГДА префикс имени столбца с имена таблиц (или псевдонимы)

<?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>"; 

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...