MySQL / PHP输出不是预期的

时间:2015-11-26 14:52:52

标签: php mysql codeigniter codeigniter-3

我的数据库中有两个名称为languagelanguage_variables的表。

language表中,我存储了语言,language_variables中包含所有语言中特定单词的值。

DB结构& language

的数据
id, title, short_code, type enum('ltr', 'rtl'), default enum('yes', 'no'), status   enum('on', 'off')
1, English, en, ltr, yes, on
2, Urdu, ur, rtl, no, on

DB结构& language_variables

的数据
id, language_id, keyword, value
1, 1, str_word, this is simple string
2, 2, str_word, اس سادہ سلک ہے
3, 1, str_word2, this is 2nd string

我想要的输出

我想一次显示关键字str_word并显示相同关键字的语言列表下拉列表。

我的输出中的问题

PlayHD.pk

我的SQL查询是

SELECT
lv.id, lv.language_id, lv.keyword, lv.`value`, l.title
FROM language_variable AS lv
    INNER JOIN `language` AS l ON l.id = lv.language_id

GROUP BY lv.keyword
ORDER BY lv.id DESC

我的观点

<?php
foreach($records as $record)
{
?>
<div class="banner-row1">
    <div class="banner-row-text">
        <h2><?=$record->keyword?></h2>
        <p class="text-muted">
            <small>
            Value: <?=$record->value?><br />
            Languages: 
            <select id="language_id" required>
                <option></option>
                <?php
                foreach($languages as $language)
                {
                    echo '<option value="'.$record->id.'">'.$language->title.'</option>';
                }
                ?>
            </select>
            </small>
        </p>
    </div>
    <div class="clr"></div>
</div>
<?php
}
?>

2 个答案:

答案 0 :(得分:1)

您应该加入language_id,而不是加入id表格中的language_variables

INNER JOIN `language` AS l ON lv.id = l.id

使用此

INNER JOIN `language` AS l ON l.id = lv.language_id
                                        ^         ^   

答案 1 :(得分:1)

您需要至少执行2次查询(或更改整个代码)。

1)获取所有&#34; str_word&#34; :query1 = select distinct keyword from language_variable

2)获取所有值:query2 = select * from language_variable

3)使用query1执行foreach循环,并在其中显示所有相应的值str_word。

该解决方案需要将query2作为在str_word上索引的关联数组。

替代方案,更容易编码但需要更多资源就是执行query1然后在循环中执行相应的查询select * from language_variable where str_word=:that_keyword(这意味着与关键字一样多的sql查询)