2011-02-25 89 views
0

我有一组两个表。 message_table,id,language_id,message_id,消息和语言表设置为id,language。如何避免在循环中运行MySQL查询?

我需要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>"; 


      } 


     } 
+0

是否可以为'$ returns'返回多个结果,还是只是单个记录? – mellamokb 2011-02-25 16:39:40

回答

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 />'; 

    } 

}