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");

回复您上面的评论。听起来您正在使用实体-属性-值设计。

为了匹配多个属性,你必须做一些技巧。通常,WHERE 子句一次只能应用于一行。但是由于您的每个属性都存储在单独的行中,因此您需要执行以下两种解决方案之一:

  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 回答