繁体   English   中英

MySQL查询来自查询结果的php

[英]MySQL query from a query result in php

如果我想在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);

您可以在搜索条件中应用多个术语,以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; 

您仍然可以查询查询而不会出现“重复列”错误。 只需别名并命名列

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM