Сообщение об ошибке в случае LEFT JOIN, false - PullRequest
0 голосов
/ 18 апреля 2019

Как гласит заголовок, у меня есть ситуация, в которой я делаю выбор между двумя таблицами, чтобы проверить через левое соединение, что для этого есть равные параметры, чтобы вытащить пользовательское эхо.

Как видно из таблицы внизу, у меня есть 3 компании (таблица: tev_Evidenze)

у двух из них есть поле (ID_evidenza)

следовательно, это означает, что компания 1 и 5, компания 6 владеет ею, но нет га.

Это то, что делает левое соединение, поэтому я хотел бы показать, пример

1 true
5 true
6 false

схема моего БД:

TABLE: tev_Evidenze                 
id_struttura
ID_evidenza
id_tipo_accreditamento

id_struttura. | ID_evidenza | id_tipo_accreditamento
      1           420               1
——————————————————————————————————————————————————
      1           422               5
——————————————————————————————————————————————————
      1                             6

И

TABLE: tev_Tipi_accreditamento
ID_tipo_acc
id_struttura

ID_tipo_acc. | id_struttura | 
      1           1         
——————————————————————————————
      5           1         
——————————————————————————————      
      6           1

Код:

<?php
$query_string = "SELECT * FROM tev_Tipi_accreditamento LEFT JOIN tev_Evidenze
ON tev_Tipi_accreditamento. ID_tipo_acc = tev_Evidenze.id_tipo_accreditamento
WHERE tev_Tipi_accreditamento.id_struttura = tev_Evidenze.id_struttura GROUP BY tev_Evidenze.id_struttura";
$query = mysqli_query($riskmanagement, $query_string);
?>
<?php
while($row = mysqli_fetch_assoc($query)){ ?>
<?php 
    if($query==0)  {
        echo $row['id_struttura']. "SI";
    }else{
        echo $row['id_struttura']. "no";
    }?>

<?php } ?>  

В этот момент они выходят одни

1
5

но это не выходит 6, я хотел бы опубликовать результаты, когда результат левого объединения не удовлетворен

1 Ответ

1 голос
/ 18 апреля 2019

Вы добавляете условие фильтрации в предложение WHERE, которое должно быть в предложении ON.

Измените ваш запрос с:

SELECT * 
FROM tev_Tipi_accreditamento 
LEFT JOIN tev_Evidenze ON tev_Tipi_accreditamento. ID_tipo_acc = 
          tev_Evidenze.id_tipo_accreditamento
WHERE tev_Tipi_accreditamento.id_struttura = tev_Evidenze.id_struttura 
GROUP BY tev_Evidenze.id_struttura

Кому (изменить в строке 5):

SELECT * 
FROM tev_Tipi_accreditamento 
LEFT JOIN tev_Evidenze ON tev_Tipi_accreditamento. ID_tipo_acc =
          tev_Evidenze.id_tipo_accreditamento
      AND tev_Tipi_accreditamento.id_struttura = tev_Evidenze.id_struttura 
GROUP BY tev_Evidenze.id_struttura

Используя WHERE, вы молча преобразовывали внешнее соединение во внутреннее, даже не замечая этого.

...