【问题标题】:Query multiple tables based on id of first table根据第一个表的id查询多个表
【发布时间】:2019-06-20 15:21:10
【问题描述】:

我需要用来自两个不同表的数据填充数据表。 容易,我想,只是加入或子查询。 不幸的是,第二个表不是基于 ID,所以我无法过滤那个。即使可以,我也不知道如何将其放入数据表中。

我已经搜索了几天,仍然没有运气..

表 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>";
}

我将如何执行以下操作?: select * from table_A 并使用 id 选择姓名、年龄和电子邮件,将此信息放入我的数据表并转到下一行?

编辑:它有效,但不显示我现在拥有的 Naam(姓名)电子邮件和年龄(leftijd):

$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";
}

【问题讨论】:

  • 您可以在插入中使用选择。见stackoverflow.com/questions/15523597/… ...
  • “将此信息放入我的数据表中” - 你是什么意思?是否要将数据复制到另一个表中?
  • 我试图将我的 html 表标识为数据表,因为我认为人们会知道它是什么..

标签: php mysql datatable subquery


【解决方案1】:

以下是根据您的回答应该可以工作的代码:

$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";
}

您没有显示某些列的原因是您在 PHP 中的“echo”语句中有错误的值。例如,tn.value as Naamtn.value 定义为“Naam”。因此,更改 PHP 中的值以反映应该让查询工作。

要更详细地说明查询的作用,这里有一个超简化的版本。想象一下,您必须有表 A 和 B,并且每个表都有一个字段“id”和“value”。看看这个查询:

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

这将从表 A 和 B 中选择值并返回它们,但仅当 A 中的 id 和 B 中的 id 之间存在匹配时。您可以阅读有关连接的更多信息Here

子查询部分比较简单。它从表 B 中选择所有“registration_id”和“value”,其中字段是特定类型,例如“Naam”。

【讨论】:

  • 感谢您的回答,不幸的是,这给了我一个 500 错误。请参阅我的问题了解我现在拥有的内容。
  • @TheundeVries,我刚刚看到我在分号前缺少了一个引号。把它放进去可能会解决这个问题。我在下面添加了 PHP 友好的代码。
  • 哇,我自己怎么没看到..我自己已经尝试过'php友好版本',但也缺少引号..我会看看它,我清醒了起来。
  • 赶紧试了一下,得到了一个没有错误的白页,有时间会进一步研究。
  • 根本不工作..即使我尝试这个:$query = "SELECT id, description"。 “来自 wp_mollie_forms_registrations”; $items_result = mysqli_query($conn,$query) or die('查询错误');我得到“查询错误”,我认为每行末尾的“。”不起作用,不知道为什么
猜你喜欢
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 2011-05-10
  • 2021-08-20
相关资源
最近更新 更多