Php 如何检查数据库中的多行
假设我有两列,大小和颜色,表的内容如下:Php 如何检查数据库中的多行,php,mysql,Php,Mysql,假设我有两列,大小和颜色,表的内容如下: sizes colors large red large green small green $q = "SELECT * FROM tablename WHERE sizes='large' and colors='green'"; 如果我想检索一条记录,它的大小表中有大,颜色表中有绿色,我会这样做: sizes colors large red large green small green $q = "SELECT * F
sizes colors
large red
large green
small green
$q = "SELECT * FROM tablename WHERE sizes='large' and colors='green'";
如果我想检索一条记录,它的大小表中有大,颜色表中有绿色,我会这样做:
sizes colors
large red
large green
small green
$q = "SELECT * FROM tablename WHERE sizes='large' and colors='green'";
但是,如果我想检索large
,如果它的行中同时有红色
和绿色
,该怎么办?如上所述,您似乎需要检查两行匹配的内容。自联接可能是最简单的方法:-
SELECT *
FROM SomeTable a
INNER JOIN SomeTable b
ON a.sizes = b.sizes
WHERE a.sizes = 'large'
AND a.colors = 'red'
AND b.colors = 'green'
避免使用联接,但这只返回大小(是否有其他要返回的列?)-
您似乎需要检查匹配的两行。自联接可能是最简单的方法:-
SELECT *
FROM SomeTable a
INNER JOIN SomeTable b
ON a.sizes = b.sizes
WHERE a.sizes = 'large'
AND a.colors = 'red'
AND b.colors = 'green'
避免使用联接,但这只返回大小(是否有其他要返回的列?)-
您似乎需要检查匹配的两行。自联接可能是最简单的方法:-
SELECT *
FROM SomeTable a
INNER JOIN SomeTable b
ON a.sizes = b.sizes
WHERE a.sizes = 'large'
AND a.colors = 'red'
AND b.colors = 'green'
避免使用联接,但这只返回大小(是否有其他要返回的列?)-
您似乎需要检查匹配的两行。自联接可能是最简单的方法:-
SELECT *
FROM SomeTable a
INNER JOIN SomeTable b
ON a.sizes = b.sizes
WHERE a.sizes = 'large'
AND a.colors = 'red'
AND b.colors = 'green'
避免使用联接,但这只返回大小(是否有其他要返回的列?)-
另一方面,这是糟糕的db设计。这应该是3张桌子。一张桌子的尺寸。一张桌子放颜色,然后一张中间的桌子放物品。如果这不起作用,那么试试这个,在这里,大小class='large'和颜色class='green'或颜色class='red'请重新设计您的设计并优化桌子之间的关系。如上所述,您需要将其分解为不同的表。另一方面,这是糟糕的数据库设计。这应该是3张桌子。一张桌子的尺寸。一张桌子放颜色,然后一张中间的桌子放物品。如果这不起作用,那么试试这个,在这里,大小class='large'和颜色class='green'或颜色class='red'请重新设计您的设计并优化桌子之间的关系。如上所述,您需要将其分解为不同的表。另一方面,这是糟糕的数据库设计。这应该是3张桌子。一张桌子的尺寸。一张桌子放颜色,然后一张中间的桌子放物品。如果这不起作用,那么试试这个,在这里,大小class='large'和颜色class='green'或颜色class='red'请重新设计您的设计并优化桌子之间的关系。如上所述,您需要将其分解为不同的表。另一方面,这是糟糕的数据库设计。这应该是3张桌子。一张桌子的尺寸。一张桌子放颜色,然后一张中间的桌子放物品。如果这不起作用,那么试试这个,在这里,大小class='large'和颜色class='green'或颜色class='red'请重新设计您的设计并优化桌子之间的关系。如前所述,您需要将其分解为不同的表。我认为他不希望在没有连接的情况下使用连接表,这将非常混乱。可以使用COUNT/have来完成,但这意味着返回“large”和2的计数,这看起来毫无意义(如果有更多的列,那么这可能是有意义的,但是我们需要定义这些列来自的行是红色行还是绿色行)。可以用变量来完成,但那会很糟糕。考虑到OP的代码,IN
子句中的似乎是一条可行之路。我曾经想过,after.COUNT/HAVING with IN子句只有在OP只想保留大小(可能是颜色的聚合列,使用GROUP_CONCAT)时才有意义,但会丢失行中的任何其他信息(除非这两行共用,因此也可以放在GROUP BY子句中)1.我想他不想加入。如果没有加入,那会很混乱。可以使用COUNT/have来完成,但这意味着返回“large”和2的计数,这看起来毫无意义(如果有更多的列,那么这可能是有意义的,但是我们需要定义这些列来自的行是红色行还是绿色行)。可以用变量来完成,但那会很糟糕。考虑到OP的代码,IN
子句中的似乎是一条可行之路。我曾经想过,after.COUNT/HAVING with IN子句只有在OP只想保留大小(可能是颜色的聚合列,使用GROUP_CONCAT)时才有意义,但会丢失行中的任何其他信息(除非这两行共用,因此也可以放在GROUP BY子句中)1.我想他不想加入。如果没有加入,那会很混乱。可以使用COUNT/have来完成,但这意味着返回“large”和2的计数,这看起来毫无意义(如果有更多的列,那么这可能是有意义的,但是我们需要定义这些列来自的行是红色行还是绿色行)。可以用变量来完成,但那会很糟糕。考虑到OP的代码,IN
子句中的似乎是一条可行之路。我曾经想过,after.COUNT/HAVING with IN子句只有在OP只想保留大小(可能是颜色的聚合列,使用GROUP_CONCAT)时才有意义,但会丢失行中的任何其他信息(除非这两行共用,因此也可以放在GROUP BY子句中)1.我想他不想加入。如果没有加入,那会很混乱。可以使用COUNT/have来完成,但这意味着返回“large”和2的计数,这看起来毫无意义(如果有更多的列,那么这可能是有意义的,但是我们需要定义这些列来自的行是红色行还是绿色行)。可以用变量来完成,但那会很糟糕。考虑到OP的代码,IN
子句中的似乎是一条可行之路。我曾经想过,after.COUNT/HAVING with IN子句只有在OP只想保留大小(可能是颜色的聚合列,使用GROUP_CONCAT)的情况下才有意义,但是会从t中丢失任何其他信息