首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Mysql查询生成表的正确方法是什么?

从Mysql查询生成表的正确方法是什么?
EN

Stack Overflow用户
提问于 2014-02-20 05:36:51
回答 2查看 72关注 0票数 1

我的问题是,我知道有许多不同的方法来做同样的事情,但我怀疑有一个“标准”来构建表的查询。

看看两个查询/表组合,哪一个更可以接受?是否有从查询构建表的更加标准化的版本?我想知道这样做的“最佳做法”。

不久前,我创建了一个查询:

代码语言:javascript
复制
$query1="select concat(sp.first_name,' ',sp.last_name)as 'Player Name',st.name as 'Team', spt_league_id as 'League', ss.Season_name
from stats_player sp
inner join stats_player_team stp,stats_team st, stats_season ss
where stp.player_num = sp.player_num  and st.team_num=stp.team_id and ss.season_index=stp.season_id and stp.season_id=$this_season
order by st.League_id,st.Team_num,sp.player_num";


$result=mysql_query($query1);
$num=mysql_numrows($result);

mysql_close();

然后用这个做桌子:

代码语言:javascript
复制
?>
<table border="1" cellspacing="2" cellpadding="2">
<tr>
  <td><font face="Arial, Helvetica, sans-serif"><b>Player</b></font></td>
  <td><font face="Arial, Helvetica, sans-serif"><b>Team</b></font></td>
  <td><font face="Arial, Helvetica, sans-serif"><b>League</b></font></td>
</tr>

<?php

$i=0;
while ($i < $num) {
    $f1=mysql_result($result,$i,"Player Name");
    $f2=mysql_result($result,$i,"Team");
    $f3=mysql_result($result,$i,"League");
?>
<tr>
  <td><font face="Arial, Helvetica, sans-serif"><?php echo $f1; ?></font></td>
  <td><font face="Arial, Helvetica, sans-serif"><?php echo $f2; ?></font></td>
  <td><font face="Arial, Helvetica, sans-serif"><?php echo $f3; ?></font></td>
</tr>

<?php
$i++;
}
?>

然后,我遇到了其他人编写的代码:

代码语言:javascript
复制
$query= "select first_name,last_name,email_address,name,captain_id,paid,p.player_num,league_id from stats_player p left join  stats_player_team t on p.player_num=t.player_num left join  stats_team s on t.team_id=s.team_num where season_id=$this_season and name is not NULL order by league_id,s.captain_id,name,first_name";
$results=mysql_query($query);
print "<table border=1>";
print "<tr><td>First Name</td><td>Last Name</td><td>captain</td><td>Email?</td><td>League</td><td>Team</td><td>pay</td><td>wks played</td></tr>";
while ($row=mysql_fetch_assoc($results)){
    if($row['email_address'] != NULL ){
    $email='y';
    }
    else {
    $email='n';
    }
if($row[captain_id]==$row[player_num]){ $iscapt="Captain"; }
else{$iscapt="";}
  $paid=$row[paid];
  if($paid){$playpaid="<td bgcolor=#99ff33>paid</td>";}
  else {$playpaid="<td bgcolor=#ff6633>not paid</td>";}

printf ("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></td><td>%s</td>%s \n</tr>",$row['first_name'],$row['last_name'],$iscapt,$email,$row['league_id'],$row['name'],$playpaid);

}
print "</table>";
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-20 06:53:20

总是尝试将代码与代码分开,除非您没有choice.It,看起来很笨拙,而且将来在处理事情上会有困难。此外,在加载页面时也需要更多的时间。

您的第一段代码更可取。

票数 1
EN

Stack Overflow用户

发布于 2014-02-20 06:39:47

如果输出相同,性能相同,那么更易读的代码“更好”。

但是,第一个不输出有效的HTML5或XHTML,因为它使用了应该通过CSS完成的不推荐的属性。除了全局属性之外,边框是表元素的唯一有效属性;不过,即使是边框也应该使用CSS。第一个循环中的WHILE应该使用FOR循环来完成。

所有块中的PHP都使用折旧后的mysql_query,因此它们确实不合适。

所有块中的SQL显然容易受到SQL注入的影响;您应该使用准备好的语句、参数化查询或至少是一个mysql_real_escape_string。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21899076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档