0

php でクエリ結果をクエリしたい場合はどうすればよいですか? 私がこれを持っているとしましょう..

$result = mysql_query("SELECT * FROM tbl_x WHERE tbl_x.attribute = y");

次に、その $result にクエリを実行して、そのクエリから取得した結果をフィルター処理する必要があります。私はこれをしたくないことに注意してください...

$result2 = mysql_query("SELECT * FROM ( SELECT * FROM tbl_x WHERE tbl_x.attribute = y ) AS tbl_x1 WHERE tbl_x1... etc");

それを避けたい理由は、そのようなクエリを実行すると「列が重複しています」というエラーが発生するからです。

私は次のようなものを探しています...

$result = mysql_query("SELECT * FROM tbl_x");
$result2 = mysql_query_result($result);
4

2 に答える 2

2

で区切って、検索条件に複数の用語を適用できますAND

$result = mysql_query("SELECT * FROM tbl_x 
                       WHERE tbl_x.attribute = y 
                         AND tbl_x.attribute2 = z");

上記のコメントを再確認してください。Entity-Attribute-Value設計を使用しているようです。

複数の属性を一致させるには、いくつかのトリックを行う必要があります。通常、WHERE 句は一度に 1 つの行にしか適用できません。ただし、各属性は別々の行に格納されるため、次の 2 つのソリューションのいずれかを実行する必要があります。

  1. 複数の行を 1 つの行に結合して、1 つの条件ですべての属性に対して WHERE を使用できるようにします。

    SELECT config_id
    FROM attributes AS s
    JOIN attributes AS c USING (config_id)
    JOIN attributes AS l USING (config_id)
    WHERE (s.attr, s.value) = ('size', 'M')
    AND (c.attr, c.value) = ('colour, 'green')
    AND (l.attr, l.value) = ('cloth', 'cotton);
    
  2. いくつかの属性のいずれかを検索し、一致する行の数が検索していた属性の数と同じであれば、それらをすべて見つけたことになります。

    SELECT config_id
    FROM attributes
    WHERE (attr, value) = ('size', 'M') 
    OR (attr, value) = ('colour', 'green') 
    OR (attr, value) = ('cloth', 'cotton')
    GROUP BY config_id
    HAVING COUNT(DISTINCT attr) = 3;
    
于 2012-11-22T22:10:04.263 に答える
0

「重複した列」エラーが発生することなく、引き続きクエリのクエリを実行できます。列に別名を付けて名前を付けるだけです

 $result2 = mysql_query("SELECT tbl_x1.col1, tbl_x1.col2,...etc  FROM 
            (SELECT * FROM tbl_x WHERE tbl_x.attribute = y) AS tbl_x1 
             WHERE tbl_x1... etc");
于 2012-11-22T22:15:45.687 に答える