0

一个很长而且可能很简单的问题,但我的大脑被炸了,我目前无法处理这个逻辑。

不幸的是,我必须使用一个数据库。用户 #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声明能解决所有这些问题吗?

4

1 回答 1

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
         }
     }
 }

现在,在不更好地了解您的数据和数据库结构的情况下,我会犹豫一下推荐这个。您的数据库和循环可能允许像“壳牌石油”这样的公司有多个 ID 号。您的循环会将最后一个留在 $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 语句。另外,切换到

并使用准备好的语句(mysqliPDO)。

于 2013-05-28T23:09:42.070 回答