我有一组两张桌子。一个message_table,其id,language_id,message_id,message和语言表设置为id,language。
我需要1)显示结果,显示哪些消息已从语言1翻译成语言2和2)还显示语言1中的哪些消息尚未翻译。尚待翻译的消息不在messages_table中。
让步骤1变得简单:
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>";
}
}
答案 0 :(得分:1)
将表连接到自身以查找相关消息。
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 />';
}
}