gpt4 book ai didi

mysql - 如何避免 MySQL 查询在循环内运行?

转载 作者:行者123 更新时间:2023-11-29 14:53:52 25 4
gpt4 key购买 nike

我有一组两张 table 。一个包含 id、language_id、message_id、message 的 message_table 和一个设置为 id、language 的语言表。

我需要 1) 显示结果,显示哪些消息已从语言 1 翻译为语言 2,2) 还显示语言 1 中的哪些消息尚未翻译。尚未翻译的消息不在 messages_table 中。

第一步很容易实现:

SELECT message_table.message AS start, end.message AS end FROM message_table LEFT JOIN message_table AS end ON (end.message_id = message_table.message_id message_table.id != end.id AND message_table.language_id = '$start' AND end.language_id='$end'

但我需要它返回尚未翻译的消息的结果。

基本上,我需要在不循环另一个 mysql 查询中的 mysql 查询的情况下实现以下操作:

$items = $this->query("SELECT message_id, message FROM message_table WHERE language_id = '$start'");

foreach($items as $result) {

$message_id = $result['message_id'];

$returns = $this->query("SELECT * FROM message_table WHERE language_id = '$end' AND message_id = '$message_id'");

if(!empty($returns)) {

foreach($returns as $return) {

echo "English: " . $result['message'] . "<br>";
echo $return['message'] . '<br><br>';

}

} else {

echo "English: " . $result['message'];
echo "<br>none<br><br>";


}


}

最佳答案

将表与其自身连接起来以查找相关消息。

SELECT
m1.message as EnglishMessage, m2.message as TranslatedMessage
FROM
message_table m1
LEFT JOIN
message_table m2 on m1.message_id = m2.message_id
WHERE
m1.language = '$start' and m2.language = '$end'

如果TranslateMessage不为NULL,则显示翻译后的消息。否则,没有可用的翻译:

foreach ($items as $result) {

$EnglishMessage = $result['EnglishMessage'];
$TranslatedMessage = $result['TranslatedMessage'];

if ($TranslatedMessage) { // not sure about this!

echo 'English: '. $EnglishMessage. '<br />';
echo $TranslatedMessage. '<br /><br />';

} else {

echo 'English: '. $EnglishMessage;
echo '<br />none<br /><br />';

}

}

关于mysql - 如何避免 MySQL 查询在循环内运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5119736/

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