【问题标题】:mysqli fetch recordsmysqli 获取记录
【发布时间】:2012-12-25 00:23:33
【问题描述】:

这是关于 Show three images from each user 的帖子,其中有一个很好的解决方案来解决我遇到的相同问题。

if ($stmt = $mysqli->prepare("SELECT p1.userID, p1.picture as pic1, p2.picture as pic2, p3.picture as pic3
FROM
  pictures p1 left join pictures p2
  on p1.userID=p2.userID and p1.picture<>p2.picture
  left join pictures p3
  on p1.userID=p3.userID and p1.picture<>p3.picture and p2.picture<>p3.picture
GROUP BY p1.userID
LIMIT ?,1")) {

    $stmt->bind_param("i", $first); 
    $stmt->execute();
    $stmt->bind_result($user, $pic1, $pic2, $pic3);
    $stmt->fetch();
    $stmt->close();
}
$mysqli->close();
?>
<div style="position:absolute; top:50px; left:100px; width:800px; text-align: center;">
  <img src="<?PHP echo (isset($pic1) ? $image_path.$pic1 : $no_image); ?>" width="176px" height="197px">
  <img src="<?PHP echo (isset($pic2) ? $image_path.$pic2 : $no_image); ?>" width="176px" height="197px">
  <img src="<?PHP echo (isset($pic3) ? $image_path.$pic3 : $no_image); ?>" width="176px" height="197px">
</div>

我想知道如何在此查询中也获得 pictureID?例如,如果我使用图片进行投票,那么我也必须获得 pictureID。

在 Supericy 帮助后回答:(如果有人在寻找相同的人)

if ($stmt = $mysqli->prepare("SELECT p1.userID, p1.picture as pic1, p1.pictureID as pic1id, p2.picture as pic2, p2.pictureID as pic2id, p3.picture as pic3, p3.pictureID as pic3id
FROM
  pictures p1 left join pictures p2
  on p1.userID=p2.userID and p1.picture<>p2.picture
  left join pictures p3
  on p1.userID=p3.userID and p1.picture<>p3.picture and p2.picture<>p3.picture
GROUP BY p1.userID
LIMIT ?,1")) {

然后绑定它

$stmt->bind_result($user, $pic1, $pic1id, $pic2, $pic2id, $pic3, $pic3id);

【问题讨论】:

    标签: php mysql mysqli mysqlimport picturegallery


    【解决方案1】:

    试试这个,

    SELECT p1.userID,coalesce(p1.pictureID,p2.pictureID,p3.pictureID) pictureID, 
           coalesce(p1.picture,p2.picture,p3.picture) as pic
    FROM
      pictures p1 left join pictures p2
      on p1.userID=p2.userID and p1.picture<>p2.picture
      left join pictures p3
      on p1.userID=p3.userID and p1.picture<>p3.picture and p2.picture<>p3.picture
    GROUP BY p1.userID,pictureID,pic
    LIMIT ?,1
    

    【讨论】:

      【解决方案2】:

      假设图片的ID列名为“pictureID”:

      SELECT p1.userID, p1.picture as pic1, p1.pictureID as pic1id, p2.picture as pic2, p2.pictureID as pic2id, p3.picture as pic3, p3.pictureID as pic3id
      FROM
        pictures p1 left join pictures p2
        on p1.userID=p2.userID and p1.picture<>p2.picture
        left join pictures p3
        on p1.userID=p3.userID and p1.picture<>p3.picture and p2.picture<>p3.picture
      GROUP BY p1.userID
      LIMIT ?,1
      

      然后在绑定结果的时候:

      $stmt->bind_result($user, $pic1, $pic1id, $pic2, $pic2id, $pic3, $pic3id);
      

      【讨论】:

      • 听起来不错,但我是否必须在 bind_result 中也绑定它的变量?
      • 哦,对,是的。 $stmt-&gt;bind_result($user, $pic1, $pic1_id, $pic2, $pic2_id, $pic3, $pic3_id);(编辑了我的答案)
      • 我试过了,但它给出了“警告:mysqli_stmt::bind_result() [mysqli-stmt.bind-result]:绑定变量的数量与准备好的语句中的字段数量不匹配”
      • 我还有一个问题,如果我想添加一个检查,如“仅选择已批准=1 的图像”,我将在查询中写在哪里?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 2013-11-25
      • 1970-01-01
      相关资源
      最近更新 更多