Mysql 选择同一列上的多个位置

Mysql 选择同一列上的多个位置,mysql,sql,Mysql,Sql,我有一个数据库,里面有一群被分成不同颜色的狗:红色、绿色和黄色 Name Color --------------- Dog1 Green Dog2 Green Dog3 Yellow Dog4 Yellow Dog5 Red Dog6 Red etc. 假设我有一张有100只狗的桌子,然后我想把它们分成不同的一组,每一组有4只狗。问题是红狗和绿狗不能在同一个温度下生存 我已经尝试了MongoDB和SQL数据库,但我还不能确定这是否可行 在SQL中,我尝

我有一个数据库,里面有一群被分成不同颜色的狗:红色、绿色和黄色

Name Color --------------- Dog1 Green Dog2 Green Dog3 Yellow Dog4 Yellow Dog5 Red Dog6 Red etc. 假设我有一张有100只狗的桌子,然后我想把它们分成不同的一组,每一组有4只狗。问题是红狗和绿狗不能在同一个温度下生存

我已经尝试了MongoDB和SQL数据库,但我还不能确定这是否可行

在SQL中,我尝试了:

SELECT * FROM Dogs WHERE color IN ('green', 'yellow') OR color IN ('red', 'yellow') ORDER BY RAND() LIMIT 4;
但是红色和绿色仍然可以一起选择。有人知道如何实现这一点吗?

假设您的原始表名为temp:

    declare @holding table (name varchar(max), color varchar(max), heat int)
     declare @name varchar(max)
     declare @color varchar(max)
     declare @heat1 int
     declare @heat2 int
     declare @heat3 int
     declare @heat4 int
     declare @iterator int =1 
     while @iterator<=(Select  max(cast(replace(name,'dog','') as int))  from #temp)
     begin
     select @color= color, @name=name from #temp where name='dog'+cast(@iterator as varchar(max))
     select @heat1=count(*) from @holding where heat=1
     select @heat2=count(*) from @holding where heat=2
     select @heat3=count(*) from @holding where heat=3
     select @heat4=count(*) from @holding where heat=4

     if @color = 'red'
     begin
         if @heat1>=@heat2
         insert @holding 
         select @name, @color, 2
         else 
         insert @holding 
         select @name, @color, 1
     end

     if @color = 'yellow'
     begin
         if @heat1<=@heat2 and @heat1<=@heat3 and @heat1<=@heat4
         insert @holding 
         select @name, @color, 1
         else if @heat2<=@heat1 and @heat2<=@heat3 and @heat2<=@heat4
         insert @holding 
         select @name, @color, 2
         else if @heat3<=@heat1 and @heat3<=@heat2 and @heat3<=@heat4
         insert @holding 
         select @name, @color, 3
         else
         insert @holding 
         select @name, @color, 4
     end

     if @color = 'green'
     begin

         if @heat3>=@heat4
         insert @holding 
         select @name, @color, 4
         else 
         insert @holding 
         select @name, @color, 3

     end

     set @iterator=@iterator+1
     end 

     select * from @holding 
     order by heat, color

这听起来很傻,但你就不能按颜色点吗?你的热身会像全绿、全黄等一样无聊,但它会解决你的问题

也许像

SELECT * FROM (
    SELECT *, CASE WHEN Color = 'Green' THEN 1 ELSE CASE WHEN Color = 'Yellow' THEN 2 ELSE 3 END END AS o FROM dogs 
) x ORDER BY x.o

用你正在使用的数据库标记你的问题。请不要标记不同的技术。如果您有SQL问题,请向适当的听众提问。如果您有MongoDB或其他引擎问题,那就是,没有什么事情是一样的,也没有什么问题是不同的引擎之间的最佳答案。黄色的狗不会在这里重复吗?我想他只关心红色和绿色的存在separate@DanielMarcus这只给了我四只热狗。我有一张桌子,桌上有100只狗,我想把它们都放在不同的暖炉里,一只狗只能放在一个暖炉里,而且绿色和红色的狗不能放在同一个暖炉里。我不知道这是否可能?我明白了-你在使用sql server吗?如果是这样的话,你可以在每一个循环中决定放哪种热量into@DanielMarcus不,我没有使用sql server,但这听起来是个好主意!你有什么建议吗?或者你知道怎么做的教程吗?是的,我想这会解决我的问题,谢谢!唯一的问题是,如果我还有5只黄狗,我该怎么办。既然一场比赛中应该只有4只狗,我该如何处理最后一只狗。。。它应该放在一个绿色或红色的暖气,这需要更多的狗在暖气。是的,我有点好奇。首先,我假设我们知道狗的总数是4的倍数,对吗?那就意味着你再也不会有5条狗了。我写的这个查询的顺序是GGGYYRR,如果我们假设这个数字可以被4整除,那么这个解决方案就是可能的原因,例如,GGRR是不可解的,那么这个方法会产生一个解决方案。问题是,我想创建的应用程序是在比赛前随机进行热身,每次比赛的狗数会有所不同,就像参加比赛的狗会不时不同一样。。。