我正在尝试查询工作,该查询显示来自作为phpbb论坛一部分的多选字段的特定信息。
SELECT d.pf_firstname, d.pf_lastname, d.pf_specialism
FROM phpbb_profile_fields_data d
WHERE d.pf_lastname = 'Linssen'
上面的查询给出了以下结果:
-- firstname: Pierre
-- lastname: Linssen
-- pf_specialism: 1;3;8;10;12;15;16 (which are the selected options)
在另一个表中可用选项之间的关系(0到18) 并给出了相关的文字。
result of a "wrong" query, showing all these options
我需要的查询应该显示:用户的名字和姓氏以及仅该用户(在本例中为Linssen)为特定个人资料字段选择的特定选项(在这种情况下:专长)。
所以查询的结果应该是
-- firstname: Pierre
-- lastname: Linssen
-- specialism: (1) Counseling ; (2) Executive Coaching ; (8) Oplossings gericht coachen; (10) Provocatief coachen ; (12) Sales coaching ; (15) Team coaching ; (16) Wandel coaching
我该怎么做?
为了支持多语言,配置文件字段值(TEXT)存储在_lang表中,而实际的_data表只保存到lang表的索引。因此,您可以将数据存储在数据表中,然后将其映射到"项目经理"用英语或" Gestor de Proyectos"用西班牙语......
2017-01-22:感谢输入sofar仍然在努力让查询工作。 请在下面的三个表中找到相关内容。
phpbb_profile_lang具有以下相关字段 - field_id(41) - lang_id(2) - lang_name(specialisme)
phpbb_profile_fields_data具有以下相关字段 - user_id(90) - pf_voornaam(皮埃尔) - pf_achternaam(Linssen) - pf_specialisme(1; 3; 8; 10; 12; 15; 16)
phpbb_profile_fields_lang具有以下相关字段 - field_id(41) - lang_id(2) - option_id(0)lang_value(商务教练) - option_id(1)lang_value(咨询) - option_id(2)lang_value(执行教练) - option_id(3)lang_value(Holistische Coaching) - ............................................... - ............................................... - option_id(17)lang_value(Zingeving) - option_id(18)lang_value(Overige)
答案 0 :(得分:0)
您加入表格的查询如下所示:
select pf_voornaam, pf_lastname, lang_value
from phpbb_profile_fields_data pfd
inner join phpbb_profile_fields_lang pfl on pfl.feld_id = pfd.pf_specialisme
inner join phpbb_profile_lang pl on pfl.lang_id = pl.lang_id;
如果您可以控制架构,我强烈建议您将phpbb_profile_lang.lang_id更改为主键field_id并删除lang_id - 根据您显示的数据,这是多余的。
根据您的示例,我使用了以下查询:
select pf_voornaam, pf_achternaam, pf_specialisme, lang_value
from phpbb_profile_fields_data pfd
inner join phpbb_profile_fields_lang pfl on pfl.field_id = pfd.pf_specialisme
inner join phpbb_profile_lang pl on pfl.lang_id = pl.lang_id;
结果显示在this image
中答案 1 :(得分:0)
在这里有所有相关输入并且在“Javiexin”的帮助下,以下基于mysqli的php脚本以及各种包含的mysql查询就可以了。我愿意接受任何进一步改进查询和脚本的建议。
<?php
/*Open connection to our database. */
$link = mysqli_connect("localhost", "perspec1", "FLeur0798!", "perspec1");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* check if server is alive */
if (mysqli_ping($link)) {
printf ("A: Our connection is OK!<br/><br/>");
} else {
printf ("Error: %s\n", mysqli_error($link));
}
/* First MYSQL query */
$sql = "SELECT d.pf_voornaam, d.pf_achternaam, d.pf_specialisme FROM phpbb_profile_fields_data d WHERE d.pf_achternaam = 'Linssen'";
if (!$sql) { echo "Error: ".mysqli_error(); die();
} else {
printf ("B: First query is successful!<br/><br/>");
}
if ($result = mysqli_query($link, $sql))
{
echo "<table>";
//header
echo "<tr><td>Voornaam</td>";
echo "<td>Achternaam</td>";
echo "<td>Specialisme</td></tr>";
//data
while ($row = mysqli_fetch_array($result))
{
echo "<tr><td>{$row[0]}</td>";
echo "<td>{$row[1]}</td>";
echo "<td>{$row[2]}</td></tr>";
}
echo "</table><br/>";
}
/* Second MYSQL query */
$query2 = mysqli_query($link, $sql );
if (!$query2) { echo "Error: ".mysqli_error(); die();
} else {
printf ("C: Second query is successful!<br/><br/>");
}
while( $row = mysqli_fetch_assoc($query2))
$selected_opts = explode (";", $row['pf_specialisme']);
foreach ($selected_opts as $selected_opt) echo "$selected_opt <br/>";
echo "<br/>";
$selected_opts_string = implode(', ', $selected_opts);
$sql3 = "SELECT fl.option_id, fl.lang_value FROM phpbb_profile_fields f, phpbb_profile_fields_lang fl WHERE f.field_id = fl.field_id AND f.field_name = 'specialisme' AND fl.lang_id = 1 AND fl.option_id IN ($selected_opts_string) ORDER BY fl.option_id ASC";
$query3 = mysqli_query($link, $sql3 );
if (!$sql3) { echo "Error: ".mysqli_error(); die();
} else {
printf ("D: Third query is successful!<br/><br/>");
}
if (!$query3) { echo "Error: ".mysqli_error(); die(); }
echo "<table>";
while( $result = mysqli_fetch_assoc($query3) )
{
echo "<tr><td>$result[option_id]</td>";
echo "<td>$result[lang_value]</td></tr>";
}
echo "</table>";
mysqli_free_result($result);
mysqli_close($link);
?>