Запрос нескольких таблиц на основе идентификатора первой таблицы - PullRequest
1 голос
/ 20 июня 2019

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

Я искал уже несколько дней, но мне все еще не повезло с этим ..

Таблица wp_mollie_forms_registrations имеет:

#id  # description #
#----#-------------#
#100 # Race #
#101 # Pull #
####################

Таблица wp_mollie_forms_registration_fields имеет:

#id  # field # value
#----#------#-------#
#100 # Naam # Theun #
#100 # E-mail # test@test.com #
#100 # Leeftijd # 28 #
#100 # Soort voertuig # Auto #
#100 # Betaalmethode # ideal #
#101 # Naam # Theun    #
#101 # E-mail# quest@write.nl #
#101 # Woonplaats # Groningen #
#101 # Merk en type # New Holland #
#101 # Gewichtsklasse # 2.8T #
#101 # Betaalmethode # ideal #
#####################

Это код:

$query = "select * from A";
$items_result = mysqli_query($conn,$query) or die;

if ($items_result->num_rows > 0) {
echo "<table id='table_id' class='display'><thead><tr><th>ID</th> 
<th>description</th><th>Name</th><th>Age</th><th>Email</th></tr></thead> 
</tbody>";
while ($row = mysqli_fetch_assoc($items_result)){
echo "<tr><td>".$row["id"]."</td><td>".$row["description"]."</td> 
<td>".$Name."</td><td>".$row["Age"]."</td><td>".$row["Email"]."</td>
</tr>";
}

Как мне сделать следующее ?: выбрать * из таблицы_A и использовать идентификаторчтобы выбрать имя, возраст и адрес электронной почты, поместить эту информацию в мои таблицы данных и перейти к следующей строке?

РЕДАКТИРОВАТЬ: Это работает, но не показывает Naam (имя) E-mail и Age (leeftijd) У меня теперь есть:

$query = "SELECT wp_mollie_forms_registrations.id, wp_mollie_forms_registrations.description, tn.value AS 'Naam', te.value AS 'E-mail', ta.value AS 'Leeftijd' ".
"FROM wp_mollie_forms_registrations".
" INNER JOIN (SELECT registration_id, value FROM wp_mollie_forms_registration_fields WHERE field = 'Naam') tn ON wp_mollie_forms_registrations.id = tn.registration_id".
" INNER JOIN (SELECT registration_id, value FROM wp_mollie_forms_registration_fields WHERE field = 'E-mail') te ON wp_mollie_forms_registrations.id = te.registration_id".
" INNER JOIN (SELECT registration_id, value FROM wp_mollie_forms_registration_fields WHERE field = 'Leeftijd') ta ON wp_mollie_forms_registrations.id = ta.registration_id";
if(!mysqli_query($conn, $query)){ echo "Error: ".mysqli_error($conn); }
$items_result = mysqli_query($conn,$query) or die;

if ($items_result->num_rows > 0) {
echo "<table id='table_id' class='display'><thead><tr><th>ID</th><th>description</th><th>Name</th><th>Age</th><th>Email</th></tr></thead></tbody>";
while ($row = mysqli_fetch_assoc($items_result)){
    echo "<tr><td>".$row["id"]."</td><td>".$row["description"]."</td><td>".$row["tn.value"]."</td><td>".$row["ta.value"]."</td><td>".$row["te.value"]."</td>
</tr>";
}
    echo "</tbody></table>";
} else {
    echo "0 results";
}

1 Ответ

0 голосов
/ 20 июня 2019

Вот код, который должен работать на основе ваших ответов:

$query = "SELECT wp_mollie_forms_registrations.id as 'ID', wp_mollie_forms_registrations.description as 'Description', tn.value AS 'Naam', te.value AS 'Email', ta.value AS 'Leeftijd' ".
"FROM wp_mollie_forms_registrations".
" INNER JOIN (SELECT registration_id, value FROM wp_mollie_forms_registration_fields WHERE field = 'Naam') tn ON wp_mollie_forms_registrations.id = tn.registration_id".
" INNER JOIN (SELECT registration_id, value FROM wp_mollie_forms_registration_fields WHERE field = 'E-mail') te ON wp_mollie_forms_registrations.id = te.registration_id".
" INNER JOIN (SELECT registration_id, value FROM wp_mollie_forms_registration_fields WHERE field = 'Leeftijd') ta ON wp_mollie_forms_registrations.id = ta.registration_id";
if(!mysqli_query($conn, $query)){ echo "Error: ".mysqli_error($conn); }
$items_result = mysqli_query($conn,$query) or die;

if ($items_result->num_rows > 0) {
echo "<table id='table_id' class='display'><thead><tr><th>ID</th><th>description</th><th>Name</th><th>Age</th><th>Email</th></tr></thead></tbody>";
while ($row = mysqli_fetch_assoc($items_result)){
    echo "<tr><td>".$row["ID"]."</td><td>".$row["Description"]."</td><td>".$row["Naam"]."</td><td>".$row["Leeftijd"]."</td><td>".$row["Email"]."</td>
</tr>";
}
    echo "</tbody></table>";
} else {
    echo "0 results";
}

Причина, по которой вы не отображали определенные столбцы, заключается в том, что вы неправильно указали значения в выражении 'echo' в PHP. Например, tn.value as Naam определяет tn.value как «Наам». Поэтому изменение значений в PHP для отражения этого должно позволить запросу работать.

Для более подробного описания того, что делает запрос, вот ультра упрощенная версия. Представьте, что у вас есть таблицы A и B, и у каждого есть поля 'id' и 'value'. Посмотрите на этот запрос:

SELECT A.value, B.value
FROM A
INNER JOIN B
ON A.id = B.id

Это выберет значения из таблиц A и B и вернет их, но ТОЛЬКО ЕСЛИ существует совпадение между идентификаторами в A и идентификаторами в B. Вы можете узнать больше о соединениях Здесь .

Часть подзапроса относительно проста. Он выбирает все значения 'registration_id' и 'из таблицы B, где поле относится к определенному типу, например' Naam '.

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