我有一个关于摄影的项目,我正在通过这个网络服务收到通知;
<?php
class notify extends db_connect
{
private $requestFrom = 0;
private $language = 'en';
public function __construct($dbo = NULL)
{
parent::__construct($dbo);
}
private function getMaxId()
{
$stmt = $this->db->prepare("SELECT MAX(id) FROM notifications");
$stmt->execute();
return $number_of_rows = $stmt->fetchColumn();
}
public function getAll($notifyId = 0)
{
if ($notifyId == 0) {
$notifyId = $this->getMaxId();
$notifyId++;
}
$notifications = array("error" => false,
"error_code" => ERROR_SUCCESS,
"notifyId" => $notifyId,
"notifications" => array());
$stmt = $this->db->prepare("SELECT * FROM notifications WHERE notifyToId = (:notifyToId) AND id < (:notifyId) ORDER BY id DESC LIMIT 20");
$stmt->bindParam(':notifyToId', $this->requestFrom, PDO::PARAM_INT);
$stmt->bindParam(':notifyId', $notifyId, PDO::PARAM_INT);
if ($stmt->execute()) {
if ($stmt->rowCount() > 0) {
while ($row = $stmt->fetch()) {
$time = new language($this->db, $this->language);
if ($row['notifyFromId'] == 0) {
$profileInfo = array("id" => 0,
"state" => 0,
"username" => "",
"fullname" => "",
"lowPhotoUrl" => "/img/profile_default_photo.png");
} else {
$profile = new profile($this->db, $row['notifyFromId']);
$profileInfo = $profile->get();
unset($profile);
}
$data = array("id" => $row['id'],
"type" => $row['notifyType'],
"postId" => $row['postId'],
"fromUserId" => $profileInfo['id'],
"fromUserState" => $profileInfo['state'],
"fromUserUsername" => $profileInfo['username'],
"fromUserFullname" => $profileInfo['fullname'],
"fromUserPhotoUrl" => $profileInfo['lowPhotoUrl'],
"createAt" => $row['createAt'],
"imgUrl" => $row['imgUrl'],
"timeAgo" => $time->timeAgo($row['createAt']));
array_push($notifications['notifications'], $data);
$notifications['notifyId'] = $row['id'];
unset($data);
}
}
}
return $notifications;
}
public function createNotify($notifyToId, $notifyFromId, $notifyType, $postId = 0)
{
$createAt = time();
$stmt = $this->db->prepare("INSERT INTO notifications (notifyToId, notifyFromId, notifyType, postId, createAt ,imgUrl) value (:notifyToId, :notifyFromId, :notifyType, :postId, :createAt, :imgUrl)");
$stmt->bindParam(":notifyToId", $notifyToId, PDO::PARAM_INT);
$stmt->bindParam(":notifyFromId", $notifyFromId, PDO::PARAM_INT);
$stmt->bindParam(":notifyType", $notifyType, PDO::PARAM_INT);
$stmt->bindParam(":imgUrl", $postImage, PDO::PARAM_STR);
$stmt->bindParam(":postId", $postId, PDO::PARAM_INT);
$stmt->bindParam(":createAt", $createAt, PDO::PARAM_INT);
$stmt->execute();
return $this->db->lastInsertId();
}
public function remove($notifyId)
{
$stmt = $this->db->prepare("DELETE FROM notifications WHERE id = (:notifyId)");
$stmt->bindParam(":notifyId", $notifyId, PDO::PARAM_INT);
$stmt->execute();
}
public function removeNotify($notifyToId, $notifyFromId, $notifyType, $postId = 0)
{
$stmt = $this->db->prepare("DELETE FROM notifications WHERE notifyToId = (:notifyToId) AND notifyFromId = (:notifyFromId) AND notifyType = (:notifyType) AND postId = (:postId)");
$stmt->bindParam(":notifyToId", $notifyToId, PDO::PARAM_INT);
$stmt->bindParam(":notifyFromId", $notifyFromId, PDO::PARAM_INT);
$stmt->bindParam(":notifyType", $notifyType, PDO::PARAM_INT);
$stmt->bindParam(":postId", $postId, PDO::PARAM_INT);
$stmt->execute();
}
public function getAllCount()
{
$stmt = $this->db->prepare("SELECT count(*) FROM notifications WHERE notifyToId = (:notifyToId)");
$stmt->bindParam(":notifyToId", $this->requestFrom, PDO::PARAM_INT);
$stmt->execute();
return $number_of_rows = $stmt->fetchColumn();
}
public function getNewCount($lastNotifyView)
{
$stmt = $this->db->prepare("SELECT count(*) FROM notifications WHERE notifyToId = (:notifyToId) AND createAt > (:lastNotifyView)");
$stmt->bindParam(":notifyToId", $this->requestFrom, PDO::PARAM_INT);
$stmt->bindParam(":lastNotifyView", $lastNotifyView, PDO::PARAM_INT);
$stmt->execute();
return $number_of_rows = $stmt->fetchColumn();
}
public function setLanguage($language)
{
$this->language = $language;
}
public function getLanguage()
{
return $this->language;
}
public function setRequestFrom($requestFrom)
{
$this->requestFrom = $requestFrom;
}
public function getRequestFrom()
{
return $this->requestFrom;
}
}
并且这段代码完美无缺,但是我插入了名为imgUrl的新参数,并且它正在“通知”数据库中获取数据。
"imgUrl" => $row['imgUrl'],
我知道问题是我正在使用$ row但我不知道如何在另一个表'帖子'中获取这些数据。我在“通知”和“帖子”中有一个共同的密钥。在帖子中,这个coloumn名称是'id',在'notifications'表中,这个coloumn名称是'postId'。所以很快我想通过这个webservice imgUrl参数进入'posts'表。 我怎样才能做到这一点?谢谢。
答案 0 :(得分:2)
使用左连接或内连接,取决于您的方案。
$stmt = $this->db->prepare("SELECT notifications.*, posts.imgUrl
FROM notifications
LEFT JOIN posts ON notifications.postId = posts.Id
WHERE notifyToId = (:notifyToId)
AND id < (:notifyId)
ORDER BY id DESC
LIMIT 20");
Left join
将始终返回一行,即使您没有任何帖子(postId为空,或者不是)。
Inner join
, postId != null
只会返回一行。