Присоединиться к нескольким таблицам с добавленным символом

У меня есть 2 запроса для получения строки из нескольких таблиц. Эти запросы уже проверены и возвращают нужную мне строку.

Вот 1-й запрос.

select mst_province.provinsi as provinsi, mst_kab.kabupaten as kabupaten, form_kuesioner_pengelola.namasite as nama 
from form_kuesioner_pengelola 
join form_kuesioner_surveyor on form_kuesioner_surveyor.namalokasi = form_kuesioner_pengelola.namasite 
join mst_province on mst_province.id_prov = form_kuesioner_pengelola.idprov 
join mst_kab on mst_kab.id_prov = form_kuesioner_pengelola.idprov and mst_kab.id_kab = form_kuesioner_pengelola.idkab 
group by form_kuesioner_pengelola.namasite 
order by form_kuesioner_pengelola.idprov, form_kuesioner_pengelola.idkab

Я показываю их в таблице с добавленным символом

echo "<tr> <th>No.</th> <th>Provinsi</th> <th>Kabupaten</th> <th>Namasite</th> <th>Form Manfaat</th> <th>Form Pengelola</th> <th>Form Surveyor</th> <th>status</th>";

while($row = mysqli_fetch_array($rdata)) {
    echo "<tr>";
    echo '<td>' . $no . '</td>';
    echo '<td>' . $row['provinsi'] . '</td>';
    echo '<td>' . $row['kabupaten'] . '</td>';
    echo '<td>' . $row['nama'] . '</td>';
    echo '<td>&#9989;</td>';
    echo '<td>&#9989;</td>';
    echo '<td>&#9989;</td>';
    echo '<td>complete</td>';

    echo "</tr>";
    $no++;
}  

2-й

select mst_province.provinsi as provinsi, mst_kab.kabupaten as kabupaten, form_kuesioner_pengelola.namasite as nama 
from form_kuesioner_pengelola 
join mst_province on mst_province.id_prov = form_kuesioner_pengelola.idprov 
join mst_kab on mst_kab.id_prov = form_kuesioner_pengelola.idprov and mst_kab.id_kab = form_kuesioner_pengelola.idkab 
group by form_kuesioner_pengelola.namasite 
order by form_kuesioner_pengelola.idprov, form_kuesioner_pengelola.idkab

И я показываю их в таблице, как показано ниже.

echo "<tr> <th>No.</th> <th>Provinsi</th> <th>Kabupaten</th> <th>Namasite</th> <th>Form Manfaat</th> <th>Form Pengelola</th> <th>Form Surveyor</th> <th>status</th>";

while($rowtable = mysqli_fetch_array($rdatatable)) {
    echo "<tr>";
    echo '<td>' . $notable . '</td>';
    echo '<td>' . $rowtable['provinsi'] . '</td>';
    echo '<td>' . $rowtable['kabupaten'] . '</td>';
    echo '<td>' . $rowtable['nama'] . '</td>';  
    echo '<td>&#9989;</td>';
    echo '<td>&#10006;</td>';
    echo '<td>&#10006;</td>';

    echo '<td>visited</td>';

    echo "</tr>";
    $notable++;
}

Проблема в том, что они напечатаны со своей собственной таблицей, и таким образом она возвращает мне 2 таблицы. Как я могу объединить их вместе, чтобы у меня была 1 таблица с разными символами на основе их собственной таблицы. Спасибо

Использование левого соединения для их объединения, я думаю, может помочь (?)

Joy Vincentius 10.01.2019 08:32

Почему первый запрос соединяется с form_kuesioner_surveyor, но не использует столбцы из этой таблицы?

Barmar 10.01.2019 08:59

Второй запрос выглядит так, как будто он возвращает все, что возвращает первый запрос, плюс все строки, которым нет совпадений в form_kuesioner_surveyor. Таким образом, вы получите много дублирования, когда вы их объедините. Это то, что вы хотите?

Barmar 10.01.2019 09:02

Или вы просто хотите их все, и либо Complete, либо Visited, в зависимости от того, находятся ли они в form_kuesioner_surveyor?

Barmar 10.01.2019 09:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете объединить два запроса, используя UNION.

SELECT *
FROM (
    select 'complete' as which, mst_province.provinsi as provinsi, mst_kab.kabupaten as kabupaten, form_kuesioner_pengelola.namasite as nama, form_kuesioner_pengelola.idprov, form_kuesioner_pengelola.idkab
    from form_kuesioner_pengelola 
    join form_kuesioner_surveyor on form_kuesioner_surveyor.namalokasi = form_kuesioner_pengelola.namasite 
    join mst_province on mst_province.id_prov = form_kuesioner_pengelola.idprov 
    join mst_kab on mst_kab.id_prov = form_kuesioner_pengelola.idprov and mst_kab.id_kab = form_kuesioner_pengelola.idkab 
    group by form_kuesioner_pengelola.namasite 

    UNION ALL

    select 'visited' as which, mst_province.provinsi as provinsi, mst_kab.kabupaten as kabupaten, form_kuesioner_pengelola.namasite as nama, form_kuesioner_pengelola.idprov, form_kuesioner_pengelola.idkab
    from form_kuesioner_pengelola 
    join mst_province on mst_province.id_prov = form_kuesioner_pengelola.idprov 
    join mst_kab on mst_kab.id_prov = form_kuesioner_pengelola.idprov and mst_kab.id_kab = form_kuesioner_pengelola.idkab 
    group by form_kuesioner_pengelola.namasite 
) AS u
order by u.idprov, u.idkab

Затем вы можете использовать $row['which'], чтобы узнать, следует ли помещать &#9989; или &#10006; в последние два столбца.

echo "<tr> <th>No.</th> <th>Provinsi</th> <th>Kabupaten</th> <th>Namasite</th> <th>Form Manfaat</th> <th>Form Pengelola</th> <th>Form Surveyor</th> <th>status</th>";

while($row = mysqli_fetch_array($rdata)) {
    echo "<tr>";
    echo '<td>' . $no . '</td>';
    echo '<td>' . $row['provinsi'] . '</td>';
    echo '<td>' . $row['kabupaten'] . '</td>';
    echo '<td>' . $row['nama'] . '</td>';
    echo '<td>&#9989;</td>';
    echo '<td>' . ($row['which'] == 'complete' ? '&#9989;' : '&#10006;') . '</td>';
    echo '<td>' . ($row['which'] == 'complete' ? '&#9989;' : '&#10006;') . '</td>';
    echo '<td>' . $row['which'] . '</td>';

    echo "</tr>";
    $no++;
}  

Если вы просто хотите вернуть все один раз, с Complete или Visited, в зависимости от того, находятся ли они в таблице form_kuesioner_surveyor, вам следует использовать LEFT JOIN с этой таблицей. Затем вы можете проверить, является ли столбец из таблицы нулевым или нет, чтобы узнать, было ли совпадение.

select IF(form_kuesioner_surveyor.namalokasi IS NULL), 'visited', 'complete') as which, mst_province.provinsi as provinsi, mst_kab.kabupaten as kabupaten, form_kuesioner_pengelola.namasite as nama
from form_kuesioner_pengelola 
join mst_province on mst_province.id_prov = form_kuesioner_pengelola.idprov 
join mst_kab on mst_kab.id_prov = form_kuesioner_pengelola.idprov and mst_kab.id_kab = form_kuesioner_pengelola.idkab 
left join form_kuesioner_surveyor on form_kuesioner_surveyor.namalokasi = form_kuesioner_pengelola.namasite     
group by form_kuesioner_pengelola.namasite 
order by form_kuesioner_pengelola.idprov, form_kuesioner_pengelola.idkab

он будет напечатан с & # 9989; сначала, после этого строки содержат & # 10006 ;. могу я присоединиться к ним с заказом по idprov и idkab

Joy Vincentius 10.01.2019 08:48

или возможно ли объединить их в один запрос?

Joy Vincentius 10.01.2019 08:48

Я изменил ответ, чтобы показать, как их комбинировать с UNION.

Barmar 10.01.2019 08:56

Привет, спасибо @Barmar. Но он возвращает ошибку, когда весь запрос внутри псевдонима u упорядочен u.idprov - Неизвестный столбец 'u.idprov' в 'предложении порядка'

Joy Vincentius 10.01.2019 09:10

Вам нужно добавить эти столбцы в предложение SELECT, чтобы они возвращались из объединения.

Barmar 10.01.2019 09:12

Он также возвращает несколько строк для «намасите», когда они присутствуют в «завершенных» и «посещенных». Можно ли вернуть только 1 "намасите", чтобы, если они уже присутствуют в "завершенном", они не будут отображаться в "посещенных" приветствиях!

Joy Vincentius 10.01.2019 09:17

Разве я не об этом спросил в своем комментарии выше?

Barmar 10.01.2019 09:18

Я обновил ответ, чтобы показать, как объединить их в один запрос.

Barmar 10.01.2019 09:21

Моя вина ;). Завершить или посетить в зависимости от того, находятся ли они в form_kuesioner_surveyor.

Joy Vincentius 10.01.2019 09:22

Спасибо @Barmar. Это такая большая помощь. Ваше здоровье!

Joy Vincentius 10.01.2019 09:26

Другие вопросы по теме