【问题标题】:split a string whilst use left join在使用左连接时拆分字符串
【发布时间】:2013-05-04 07:56:13
【问题描述】:

我有两个数据库。第一个包含上传文件列表以及上传文件的对象和到期日期。这被存储为代表使用 implode 的每个等级的人的数字。所以列名“foagrade”在第一行有 10,11,12。第二个数据库是一个成绩列表,其中有 ID,例如 10 = 经理、11 = HR 等。我正在使用左连接和一个基本的 html 表来显示查询。

$result = mysqli_query($con,
"SELECT UPLOAD.id, UPLOAD.title, UPLOAD.faoGrade,UPLOAD.faoLocation, UPLOAD.date,   UPLOAD.expiry, GRADE.ID, GRADE.GRADE as GR, GRADE.id
FROM UPLOAD
LEFT JOIN GRADE ON
UPLOAD.faoGrade=GRADE.ID
where owner=$user");
echo "<table id='previous'>
<tr>
<th>Title/Document name:</th>
<th>For attention of Grade</th>
<th>For Location</th>
<th>date</th>
<th>Date expires</th>
<th>Delete this briefing</th>
</tr>";

while($row = mysqli_fetch_array($result))
  {
  $id=$row['id'];
  echo "<tr>";
  echo "<td>" . $row['title'] . "</td>";
  echo "<td>" . $row['GR'] . "</td>";
  echo "<td>" . $row['foaLocation']."</td>";
  echo "<td>" . date("D, d M Y ",($row['date']));
  echo "<td>" . date("D, d M Y ",($row['expiry']));
  echo "<td><a href=pages/login/upload_delete.php?item=".$id.">delete</a></td> ";
  echo "</tr>";
  }
echo "</table>";

查询显示所有详细信息,但仅显示存储在列 faograde (MANAGER) 中的第一个等级,而不是 11 或 12。 我将如何爆炸或拆分这个?因此,对于此列中的每个数字,都会显示一个等级名称。我也必须对列“faoLocation”做同样的事情,但一次只处理一个问题。

【问题讨论】:

  • 规范化不是一种选择吗?
  • 不知道草莓从未使用过它,我会调查并告诉你。谢谢
  • 另外,您选择了grade.id 两次 - 您的结果集将有 三个 列,称为id。这会混淆您的应用程序级代码。
  • 谢谢没注意到。

标签: php mysql


【解决方案1】:

这些表应该是normalized,但是有了你已经拥有的,你可以做这样的事情:

SELECT UPLOAD.id as uploadID,
UPLOAD.title,
UPLOAD.faoLocation,
UPLOAD.date,
UPLOAD.expiry,
GRADE.ID as gradeID1,
GRADE.GRADE as GR,
GRADE.id as gradeID2 FROM UPLOAD, GRADE
WHERE 
FIND_IN_SET(gradeID2,UPLOAD.faoGrade)
and UPLOAD.owner=$user;

更新 这是SQL Fiddle

有多个名为idID 的列有点令人困惑。最好给它们起直观的名称,例如 grade_IDuser_ID。从规范化的角度来看,您可以使用关系表而不是逗号分隔的列(取决于此数据如何进入数据库)。这是video about normalization

【讨论】:

  • 这不起作用 - 尽管 FIND_IN_SET 会,所以 -1。但是 +1 推荐标准化! ;-)
  • 真正令人困惑,开始理解规范化。因为它有可能拥有很多记录,所以已经开始了。感谢您的指针
  • @Strawberry 添加了一个小提琴。你是对的。不需要使用 FIND_IN_SET。我还包括了 IN 语句以显示结果。它返回 true 但在第一个逗号处停止。
猜你喜欢
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多