我的数据库中有两个名称为language
和language_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
并显示相同关键字的语言列表下拉列表。
我的输出中的问题
我的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
}
?>
答案 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查询)