来自另一个查询的sql查询超出范围的结果

时间:2013-05-28 23:00:00

标签: php mysql sql

这是一个非常漫长而且可能是一个简单的问题,但是我的大脑已经被炒了,我目前无法处理这个逻辑。

遗憾的是,有一个我拥有的数据库。用户#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语句可以解决所有这些问题吗?

1 个答案:

答案 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语句。另外,切换到

并使用准备好的陈述(mysqliPDO)。