【问题标题】:MySQL/PHP output is not as expectedMySQL/PHP 输出不如预期
【发布时间】:2015-11-26 14:52:52
【问题描述】:

我的数据库中有两个表,名称分别为 languagelanguage_variables

language 表中,我存储了语言,并且在language_variables 中具有所有语言中特定单词的值。

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

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 一次并显示相同关键字的语言列表下拉列表。

我的输出中的问题

我的 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
}
?>

【问题讨论】:

  • 请填写您想要的 html 输出和您获得的 html 输出(以及包含如何生成 $language 和 $records 的 php 代码)。顺便说一句,我在您的语言循环中发现了一些问题,您显示的语言标题以记录 ID 作为值(而不是语言 ID)。
  • @Asenar 实际上我只想在下拉列表中显示可用并与 language_id 链接的语言是 DB。
  • 您的代码中仍然存在“逻辑”问题。如果标签为language-&gt;titlerecord-&gt;id 不应在值中。
  • @Asenar 你是对的。你的观点是正确的我已经改变了变量。因为这并不能解决真正的问题。
  • 您想只显示语言名称(English)还是与该语言匹配的实际值(this is simple string ,或English: this is simple string)? (顺便说一句,您没有在视图中更改您的 var)

标签: php mysql codeigniter codeigniter-3


【解决方案1】:

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

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

使用这个

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

【讨论】:

  • 对不起,我的问题中有错字。我又更新了我的问题
  • 我只想在下拉列表中显示与language_id链接的语言是DB。
  • 配偶 我在language 表中有 500 条记录和 language_variables 和 6 种语言。所以这个方法将运行3000 子查询。我是对的
【解决方案2】:

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

1) 获取所有“str_word”:query1 = select distinct keyword from language_variable

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2019-08-28
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多