【问题标题】:PHP, SQL newbie helpPHP、SQL新手帮助
【发布时间】:2009-09-21 17:27:04
【问题描述】:

我有下表:

注释 -------- 身份PK cid 内容 uid 评论

如果内容是 image /我希望它打印 ?imgID=$cid 并从表 title 的行中获取数据 images 如果它是一个线程我希望它打印 ?threadID=$cid 并获取表中的标题threads 等等。我该怎么做?

<h3>Latest comments</h3>
<?php 

$rs = mysql_query("
  SELECT * 
  FROM comments 
  LEFT JOIN threads 
    ON threads.id = comments.cid 
  WHERE comments.uid = $id
");
while ($row = mysql_fetch_assoc($rs)) {
 echo $row['title'];
}

【问题讨论】:

  • @George Stocker:您的编辑使问题更难阅读。

标签: php sql mysql


【解决方案1】:
 while ($row = mysql_fetch_assoc($rs)) {
   if($row['content'] == "image") {
        echo "?imgID={$cid}";
        $title = mysql_fetch_assoc(mysql_query("SELECT title from images WHERE id = '$cid'");
   } elseif ($row['content'] == "thread") {
        echo "?threadID={$cid}";
        $title = $row['title']; // Will only work as long as there is no title field in comments, oherwise use threads.title
   }
 }
 echo $title;

给你。 $cid 周围的花括号并不是严格要求的,但它们有助于避免出现问题,如果您在之后尝试打印文本,并且它会将变量名读取为其他内容。

【讨论】:

    【解决方案2】:
    $q="SELECT c.id, c.cid, c.content, c.uid, c.comment,
        COALESCE(t.title,i.title) AS the_title
        FROM comments c LEFT JOIN threads t ON (c.cid=t.id AND c.content='thread')
                        LEFT JOIN images i ON (c.cid=i.id AND c.content='image');
    

    上面将您的两个查询组合在一起,并将标题属性放在一列中。

    【讨论】:

    • +1 用于创造性解决方案。 -1 因为它很少见(我第一次看到 COALESCE),而且会让新手感到困惑。
    • COALESCE 获取其参数列表中的第一个非 NULL 值并将其输出。如果您的查询有多个相互排斥的字段或需要按特定优先顺序选择的字段,这将非常有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多