3

この問題の解決策を探しましたが、近いものもありますが、解決策が見つからないようです。さまざまな情報を含む「実行」の表があり、1 つの列はそれが適用される会社に関する情報です。また、会社のすべての情報を格納する会社のテーブルもあります。ラン テーブルの会社列では、会社は会社テーブルの「インデクサー」によって識別されます。

これで、実行に関する情報を検索して、会社を含む検索フレーズを含む任意の数のレコードを見つけることができる検索ができました。実行テーブルの会社の列であるということは、識別子番号 ie を持っているだけです。34、23、5 など、会社のテーブルの名前列の一致も確認する必要があります。

これは、1 つの会社のみが検索結果に一致する場合に正常に機能する私のクエリです。一致するすべての会社を返す必要があります。

$sql_results = "SELECT * FROM runs WHERE name LIKE '%$searchname%' OR company = (SELECT indexer FROM companies WHERE name LIKE '%$searchname%' ) OR feild LIKE '%$searchname%' ORDER BY date_due";

    while($result_results = @mysql_fetch_array($query_results))
    {
    $resultnm_array[]=$result_results['name'];
    $cmp_id = $result_results['company'];
        $sql2 = "SELECT name FROM companies WHERE indexer = '$cmp_id' LIMIT 1";
        $query2 = @mysql_query($sql2);
        $result2 = @mysql_fetch_array($query2);
        $resultcpy_array[]=$result2['name'];
    $resultfld_array[]=$result_results['feild'];
    $resultdt_array[]=$result_results['date_due'];
    $resultid_array[]=$result_results['indexer'];
    }

結果を配列に入力し、TBS テンプレート エンジンを使用して結果テーブルなどを作成しています。私は少し初心者なので、助けていただければ幸いです。私が収集したものから、結合を使用する必要があります。しかし、私はそれを機能させることができないようです...

4

1 に答える 1

4

ただ使用できませんかIN

SELECT * 
FROM runs 
WHERE name LIKE '%$searchname%' 
    OR company IN (
        SELECT indexer 
        FROM companies 
        WHERE name LIKE '%$searchname%' ) 
    OR feild LIKE '%$searchname%' 
ORDER BY date_due

あなたのコメントを考えると、「検索結果に一致する会社が 1 つだけの場合は正常に機能します」-複数の会社が検索条件に一致する場合、クエリは=.


編集を行うと、を使用してこれをより簡単にすることができJOIN、ループに追加の select ステートメントを追加する必要がなくなります。

SELECT r.*, c.name
FROM runs r
    JOIN companies c on r.company = c.indexer
WHERE r.name LIKE '%$searchname%' 
    OR r.feild LIKE '%$searchname%' 
ORDER BY r.date_due
于 2013-10-08T17:26:31.453 に答える