gpt4 book ai didi

php - MySQL在多选查询中限制字符

转载 作者:行者123 更新时间:2023-11-28 23:56:44 24 4
gpt4 key购买 nike

抱歉,如果有一个简单的答案,但我是 MySQL 的新手,不知道如何解释这个问题:

我有许多查询选择随机单词并将它们连接在一起。我试图将查询限制为仅在特定字符限制以下时才返回结果。因此,例如,这是一个查询:

SELECT CONCAT((SELECT Word FROM Adjectives ORDER BY Rand() LIMIT 1),' ',
(SELECT Word2 FROM Verbs ORDER BY Rand() LIMIT 1),' ',
(SELECT Word FROM Nouns ORDER BY Rand() LIMIT 1))

它返回类似“Adjective Verb Noun”的结果

我想做的是让查询检查完整的连接结果是否为 30 个字符或更少;如果是,则返回它,如果不是,再试一次,直到出现一个不超过 30 个字符的字符。谢谢!

更新:这是一个梦幻足球队名称生成器,它从各种表格中提取“随机”单词并将它们串在一起。所以实际上有数百万种可能的组合......如果用户指定了字符限制,我希望 SQL 在后台重试直到找到并回答适合的问题,然后呈现它。我不希望用户收到“请再试一次”之类的消息。

最佳答案

另一种方法是让 SQL 处理决策并最终吐出您想要的字符串。我在这里使用了一个 SQL 过程。

DELIMITER $$
CREATE OR REPLACE PROCEDURE `FETCH_STRING`(IN LEN INT)
BEGIN

declare TEMP varchar(100);
declare isValid boolean;
declare maxLength int;
declare minLength int;

set maxLength = LEN;
set isValid = false;

set minLength = (SELECT MIN(LENGTH(n.word))+MIN(LENGTH(a.word))+MIN(LENGTH(v.word))+2 FROM NOUNS n, ADJECTIVES a, VERBS v);
#That +2 in the end is compensating for two spaces in between
if maxLength < minLength THEN
set temp = "";
set isValid = true;
END IF;

WHILE isValid = false DO
set temp = (SELECT CONCAT(
(SELECT Word FROM Adjectives ORDER BY Rand() LIMIT 1) ,' ',
(SELECT Word FROM Verbs ORDER BY Rand() LIMIT 1),' ',
(SELECT Word FROM Nouns ORDER BY Rand() LIMIT 1)));
IF LENGTH(temp) <= maxLength THEN
set isValid = true;
END IF;
END WHILE;
select temp;
END$$
DELIMITER ;

这应该可以做到。您可以调用它并始终获得符合您要求的字符串。无需再次处理。

这就是您要找的吗?

编辑:添加了所需长度的输入字段。并添加条件以检查给定长度是否大于可能的最小连接,如果是,则返回一个空字符串。这是为了避免程序中的死循环。

关于php - MySQL在多选查询中限制字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31485986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com