0

非常に長く、おそらく単純な質問ですが、私の脳は揚げられており、現在この論理を処理できません。

残念ながら、私が使用しなければならないデータベースがあります。ユーザー #1 は、会社、コンポーネント、および最後に回答する質問に関する情報を提供します。次に、このデータをデータベースにダンプします。それらを 1 つのテーブルまたは適切に定義されたリレーショナル テーブルに格納するのではなく、ほとんどまたはまったく関係のない別々のテーブルに格納します。

問題は、これらの質問を取得する方法です

したがって、User#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の2番目のクエリが機能しないことです。しかし、私はうんざりし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
         }
     }
 }

さて、あなたのデータとデータベース構造をよく知らなければ、これをお勧めするのは少し躊躇します. データベースとループでは、「Shell Oil」のような会社に複数の ID 番号を許可する場合があります。あなたのループは $company_id の最後のものを残しますが、それはあなたが望むものではないかもしれません.

また、空の文字列に初期化しました。それもまた、あなたが望むものではないかもしれません。

JOIN 句を使用した 1 つのクエリで、必要なものがすべて返される可能性は十分にあります。


一見すると、これらの線に沿った結合が機能する可能性があります。

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 に答える