一列中的多个参数值 - 一个查询

时间:2013-04-02 16:07:30

标签: php mysql

我有一个Footwer Styles表,分为不同的相应鞋类。我想要做的是在不同(单独)类别下列出样式。

SANDALS可用的样式有: 人字拖 滑动

SHOES可用的样式是: 竞技 花边 皮便鞋 软皮鞋

正如您在下面看到的那样,我现在只是用不同的TYPEID重复我的查询。

只用一个查询就能有更高效的代码吗?

正如我的问题的标题所述:我可以在一列中执行多个参数值 - 一个查询吗?

提前致谢, 仁

+--------+---------+
| typeid | type    |
+--------+---------+
|      1 | Shoes   |
|      2 | Boots   |
|      3 | Sandals |
+--------+---------+

+---------+--------+------------+
| styleid | typeid | style      |
+---------+--------+------------+
|       1 |      1 | Athletic   |
|       2 |      1 | Lace-up    |
|       3 |      1 | Loafers    |
|       4 |      1 | Moccasins  |
|       5 |      2 | Combat     |
|       6 |      2 | Hiking     |
|       7 |      2 | Riding     |
|       8 |      3 | Flip Flops |
|       9 |      3 | Slide      |
+---------+--------+------------+

Styles_in_Cat.php

echo " Styles available for SANDALS are: <br/>";

$query="SELECT DISTINCT style, style.typeid, type 
FROM style, type
WHERE style.typeid=3
AND style.typeid=type.typeid";
if ($result = mysqli_query($con,$query))
 {
    while ($row = mysqli_fetch_assoc($result))    
      {        
          $style = $row['style'];
          $typeid = $row['typeid'];
          $type = $row['type'];

          echo " $style <br/>" ;
      }
 }


echo " Styles available for SHOES are: <br/>";

$query="SELECT DISTINCT style, style.typeid, type
FROM style, type
WHERE style.typeid=1
AND style.typeid=type.typeid";
if ($result = mysqli_query($con,$query))
 {
    while ($row = mysqli_fetch_assoc($result))    
      {        
          $style = $row['style'];
          $typeid = $row['typeid'];
          $type = $row['type'];

          echo " $style <br/>" ;
      }
 }

更新: 我想我到了那里。我把它们放在foreach循环中并得到:

靴子 - 战斗 靴子 - 徒步旅行 靴子 - 骑马 凉鞋 - 人字拖鞋 凉鞋 - 滑动 鞋子 - 运动 鞋子 - 系带 鞋子 - 乐福鞋 鞋子 - 软皮鞋

现在只需要尝试将它们分开并在不同的标题下显示,例如“可用于鞋子的样式是:”

更新2:

我一直试图将结果放在数组中过去4个小时,但到目前为止还没有成功:(。

我得到了这个结果(如xpy所示):

SELECT DISTINCT type, style.typeid, style FROM style, type
WHERE style.typeid IN ( 1,3)
AND style.typeid=type.typeid
+---------+--------+------------+
| type    | typeid | style      |
+---------+--------+------------+
| Shoes   |      1 | Athletic   |
| Shoes   |      1 | Lace-up    |
| Shoes   |      1 | Loafers    |
| Shoes   |      1 | Moccasins  |
| Sandals |      3 | Flip Flops |
| Sandals |      3 | Slide      |
+---------+--------+------------+

但我想做的是控制哪种类型出现(即使WHERE CLAUSE状态为1,3,5(typeid) - 可能我只想显示1和3)。

我读了几个帖子,但结果跟我一样。

stackoverflow.com/questions/3936073/mysql-php-selecting-only-unique-values-from-multiple-columns-and-put-them-into-s?rq=1

stackoverflow.com/questions/5345011/fetch-all-ids-and-put-them-into-an-array-in-php

我希望我正确地提出问题。我知道我可能会失声,因为我是。

基本上我正试图找到xpy所说的: “你可以将它们分开,你可以通过它们的类型来识别它们。” “你必须将你的结果放入一个单独的数组中,每个类型一个或多个数组,每个类型都有一个索引,当然你必须检查你的结果,然后把它放在特定的数组中。” p>

所以我的浏览器视图如下:

我们在鞋子上的可用款式: 竞技 花边 便鞋

我们在靴子中的可用样式: 战斗 徒步旅行 骑

我可以坚持我原来的(第一个问题),但作为一个编程新手,我真的很想学习。

再次感谢。 仁

2 个答案:

答案 0 :(得分:2)

您必须使用GROUP BY

类似

SELECT style.style, type FROM style, type where type.typeid=style.typeid
GROUP BY type, style

你应该有像

这样的结果集
Shoes   Athletic
Shoes   Lace-up
Shoes   Loafers
Shoes   Moccasins
Boots   Combat

...

简单地循环'直到类型更改以读取所有不同的样式。 这样,您可以使用一个查询读取所有样式和类型

答案 1 :(得分:0)

你可以尝试:

SELECT DISTINCT style, style.typeid, type 
FROM style, type
WHERE style.typeid IN (1,3)
AND style.typeid=type.typeid

由于shoes您将无法识别样式是否为sandals,因此会为您提供DISTINCT和{{1}} 的所有行两者的共同风格(如果它永远是一个)。