这是一个非常漫长而且可能是一个简单的问题,但是我的大脑已经被炒了,我目前无法处理这个逻辑。
遗憾的是,有一个我拥有的数据库。用户#1提供有关公司,组件以及最终要回答的问题的信息。然后它将此数据转储到数据库中。它不是将它们存储在1个表或明确定义的关系表中,而是将它们存储在几乎没有关系的单独表中。
现在问题是,如何检索这些问题
因此用户#2必须回答这些问题。用户#2提供公司名称,然后我必须查询其ID(它是自动递增的,仅与组件和问题的关系),然后提供组件的名称,我再次必须查询其ID(它的自动递增和与问题的唯一关系)。然后我必须查询给定组件和公司ID的所有问题(因为显然它是唯一明确的唯一标识符)。那么,准备好自杀了?大!让我们看看代码!
注意在循环结束后说!!!< - 超出范围的行
<?php
require_once 'connect.php';
//$company_name = $_POST['company_name'];
$company_name = 'Some Company';
$company_id_query = "SELECT * FROM company_mast WHERE company_name = '".$company_name."'";
if ($query_run = mysql_query($company_id_query)) {
if (mysql_num_rows($query_run) == NULL) {
echo ('No results found');
} else {
while ($query_row = mysql_fetch_assoc($query_run)) {
$company_id = $query_row['id'];
echo ('company id: '.$company_id); // !!!<-- goes out of scope after the loop is finished
}
}
}
$component_name = 'Some Component';
$component_id_query = "SELECT * FROM component_mast WHERE component_name = '".$component_name."' AND company_id = '".$company_id."'";
if ($query_run = mysql_query($component_id_query)) {
if (mysql_num_rows($query_run) == NULL) {
echo ('No results found');
} else {
while ($query_row = mysql_fetch_assoc($query_run)) {
$component_id = $query_row['id'];
echo ('component id: '.$component_id);
}
}
}
$questions = '';
?>
对于那些已阅读所有内容的人,谢谢。现在我的问题显然是组件ID的第二个查询永远不会起作用,因为公司ID的原始结果已超出范围。但是我在PHP
吮吸,我不知道另一种获取查询结果的方法。
因此,最重要的问题是, 如何获取结果并将其存储以使其不会超出范围?
掌握所有死亡威胁并感谢您的任何答案......特别是那些不要求我使用这种荒谬逻辑的答案。
有感
Join
语句可以解决所有这些问题吗?
答案 0 :(得分:1)
最简单的事情,但也许不是正确要做的事情:在“更广泛”的范围内初始化$ company_id。
$company_id = "";
if ($query_run = mysql_query($company_id_query)) {
if (mysql_num_rows($query_run) == NULL) {
echo ('No results found');
} else {
while ($query_row = mysql_fetch_assoc($query_run)) {
$company_id = $query_row['id'];
echo ('company id: '.$company_id); // !!!<-- goes out of scope after the loop is finished
}
}
}
现在,在不了解您的数据和数据库结构的情况下,我会稍微犹豫推荐一下。您的数据库和循环可能允许像“Shell Oil”这样的公司使用多个ID号。你的循环会将 last 中的一个留在$ company_id中,而可能不是你想要的。
另外,我将它初始化为空字符串。那也是可能不是你想要的。
使用JOIN子句的单个查询很可能会返回您需要的所有内容。
快速浏览一下后,沿着这些线的连接可能会起作用。
select c1.*, c2.*
from company_mast c1
inner join component_mast c2
on c1.company_id = c2.company_id
where c2.component_name = ?
and c1.company_id = ?
为了获得更好的答案,总是包括CREATE TABLE和INSERT语句。另外,切换到