如何使用php webservice从MySql中的2个不同表中获取数据

时间:2016-05-25 17:33:34

标签: php mysql web-services

我有一个关于摄影的项目,我正在通过这个网络服务收到通知;

<?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'表。 here 我怎样才能做到这一点?谢谢。

1 个答案:

答案 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只会返回一行。