Php mySQL函数检查列值并执行新操作

Php mySQL函数检查列值并执行新操作,php,mysql,Php,Mysql,可以在mySQL中编写一个函数来检查SELECT查询的值吗?如果可以的话!=0,是否继续运行该函数并添加到结果数组 我有一些条目被标记为相关的\u id=0其余条目都附有实际的正数 我试图创建一个查询,该查询将持续循环通过一个sql函数,检查并查看检索到的related\u id结果是否为0。如果没有,则它将再次运行,将新选中的行添加到结果数组中,并继续,直到找到0为止 按照DB的设置方式,0将始终出现,并且它将通过id进行搜索,因此应该只有一个结果 我使用的是一个稍加修改的标签系统 keywo

可以在mySQL中编写一个函数来检查SELECT查询的值吗?如果可以的话!=0,是否继续运行该函数并添加到结果数组

我有一些条目被标记为
相关的\u id
=
0
其余条目都附有实际的正数

我试图创建一个查询,该查询将持续循环通过一个sql函数,检查并查看检索到的
related\u id
结果是否为0。如果没有,则它将再次运行,将新选中的行添加到结果数组中,并继续,直到找到0为止

按照DB的设置方式,0将始终出现,并且它将通过id进行搜索,因此应该只有一个结果

我使用的是一个稍加修改的标签系统

keywords_id | keyword  | related_id
------------------------------------
1           | sports   | 0
2           | baseball | 1
3           | football | 1
4           | pitchers | 2
如果我传入
related\u id
=
2
,我希望返回一个数组,该数组生成:

array 
[0]
   keyword => 'sports'
   keywords_id => '1'
   related_id => '0'
[1]
   keyword => 'baseball'
   keywords_id => '2'
   related_id => '1'
[2]
   keyword => 'pitcher'
   keywords_id => '4'
   related_id => '2'
我尝试使用IF和THEN,但我只是没有看到足够的示例,而且很难在网上找到可靠的教程。谢谢

SELECT k.* 
FROM keywords k
WHERE keywords_id = 2
上面的查询基本上会启动它。
关键字\u id
是传递的
相关\u id
。因此,上面将返回
关键字|关键字:棒球|相关| id:1

因为相关的_id 1不是0,所以我需要再次运行它


我意识到这可以通过一些额外的查询在PHP中完成……这是我应该做的吗?在阅读了函数之后,我假设它可以在mySQL中完成。我就是想不出来。

我对上述样本的理解-需要检查所有记录,直到找到匹配项为止(上述相关的样本id=2)

如果是这样,您可以尝试使用mysql游标
为了循环结果集,MySQL不支持从函数返回数组。建议创建一个表(或者可能是一个临时表)来保存结果,然后编写一个存储过程来填充它

不确定你到底想实现什么,但可能是沿着这条路线

CREATE TABLE results (keywords_id INT, keyword VARCHAR(2000), related_id INT);

CREATE PROCEDURE populateResults(IN keyword_id_in INT)
BEGIN
  DECLARE num_results INT;
  DECLARE max_results INT;
  DECLARE next_keyword_id INT;
  SET next_keyword_id = keyword_id_in;
  SET max_results = 5;
  SET num_results = 0;

  DELETE FROM results;

  the_loop: LOOP
    INSERT INTO results
    SELECT keywords_id, keyword, related_id
    FROM keywords
    WHERE keywords_id = next_keyword_id;

    SELECT related_id
    FROM keywords
    WHERE keywords_id = next_keyword_id
    INTO next_keyword_id;

    IF (next_keyword_id = 0) || (num_results >= max_results) THEN
      LEAVE the_loop;
    END IF;
    SET num_results = num_results + 1;
  END LOOP the_loop;
END

请参见

您可以发布您尝试过的查询吗?可能有助于理解你想做什么我尽可能多地补充了。我承认这可以通过多个查询和php轻松实现。所以答案也可以将这个问题考虑在内。您正在搜索存储过程吗?^我不太确定。我查了一下存储过程,它似乎使用了mySQLs函数命令之外的东西。我之所以问这个问题,主要是因为我不了解mysql内部的函数,因此没有使用它的经验。我甚至不确定这是否可能。对不起,我的主要问题是我不明白你到底在寻找什么。(我至少没有关于数据库结构的信息)我不能举个例子。但听起来它既可以通过常规查询也可以通过存储过程来完成。在这方面我建议谷歌,从“hello world”这样的例子开始。非常酷的东西。我还没能测试它。但是仅仅是设计本身是非常有信息量的。谢谢你的链接。有趣的东西