根据php mysql中的值从多个值返回多个值

根据php mysql中的值从多个值返回多个值,php,mysql,Php,Mysql,我有一个表,其中包含一些值,如下图所示,我想得到一些值,主题的总和等于另一个值,比如13: id values 1 4 2 7 3 5 4 6 我想得到那些等于13的值。 一位朋友问我: SELECT t1.* FROM tables AS t1 INNER JOIN tables AS t2 WHERE t1.id != t2.id AND t1.`values` + t2.`values` = 13 但它只返回两个值,但假设我想要两个以上的值,或者更像 4+7+5=16或4+7

我有一个表,其中包含一些值,如下图所示,我想得到一些值,主题的总和等于另一个值,比如13:

id values

1  4
2  7
3  5
4  6
我想得到那些等于13的值。 一位朋友问我:

SELECT t1.* FROM tables AS t1
INNER JOIN tables AS t2
WHERE t1.id != t2.id AND t1.`values` + t2.`values` = 13
但它只返回两个值,但假设我想要两个以上的值,或者更像 4+7+5=16或4+7+5+6=22 我的意思是,我不想要两个数字,有时我需要更多,这取决于我想要的值。请给我一个解决方案。

临时表:

group
  sum     int
  lastid  int
  ids loooooongtext
  phase int
初始化临时表:

SET @SUM = 13;

INSERT INTO group
SELECT
  tables.val AS sum,
  tables.id  AS lastid,
  tables.id  AS ids
  0          AS phase
FROM tables
WHERE tables.val <= @SUM;
SET@SUM=13;
插入组
选择
表1.val作为总和,
tables.id作为lastid,
tables.id作为id
0作为相位
从桌子上

如果tables.val要获得涉及2行以上的组合,则需要更多的联接。还有很多…感谢您在这里编辑im new抱歉,您能给我一个例子吗?要在SQL中进行这些排列,您需要尽可能多的求和操作数,其中每个操作数都有一个条件,如
t1.id!=t2.id和t2.id!=t3.id和t1.id!=t3.id
等。。。是的,我知道这很离谱,但是必须有其他的php+mysql解决方案,通过php我们可以知道代码的最后一个id:$next_increment=0$qShowStatus=“像数据一样显示表格状态”$qShowStatusResult=mysql\u查询($qShowStatus)$row=mysql\u fetch\u assoc($qShowStatusResult)$next_increment=$row['Auto_increment'];但是我们需要的是一个循环,它一行一行地收集数据,如果它找到值,比如说我的表名是“music”,我有行“id”和“value”,你能给我找到“22”的最终代码吗?我想你可以很容易地将上面的垃圾处理成php,只需将
替换成音乐,将sql@variables替换成php$variables,它应该会起作用。或者不是,我没有测试:)对不起,我是新来的,这让我很复杂,我不能很容易地阅读其中的一些内容,比如(SET PHASE=PHASE+1;)这只是一个帮助变量,有助于抛出不可计算的“结果”。如果你是php/mysql的初学者,也许你应该从(例如)开始学习它们。我试图理解代码,但我不太理解(@sum),请解释一下,它是$variable还是其他什么,因为当我将它作为变量时,我的代码会输出错误
SET @PHASE = 0;

do
  SET @PHASE = @PHASE + 1;

  -- try to append new values to each group
  INSERT INTO group
  SELECT  ( group.sum   +   tables.val ) AS sum,
                            tables.id    AS lastid,
    CONCAT( group.ids, ",", tables.id  ) AS ids,
            @PHASE                       AS phase
  FROM       group
  INNER JOIN tables  ON group.lastid < tables.id          -- monotonity to prevent (some) duplicates
                    AND group.sum    + tables.val <= @SUM;

  -- delete dead ends
  DELETE
  FROM  group
  WHERE group.phase < @PHASE
    AND group.sum  != @SUM;

while ROW_COUNT() > 0;