ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/branches/2.6.x/webapp/lib/db/bookmark.php @ 2854

Last change on this file since 2854 was 2854, checked in by ogawa, 13 years ago

#744:SQLの「IN ()」でカッコ内が空の場合にMySQLエラーが発生する

File size: 7.4 KB
Line 
1<?php
2/**
3 * @copyright 2005-2006 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7function db_bookmark_list($c_member_id, $page, $page_size)
8{
9    $sql = 'SELECT c_member_id, nickname, image_filename, access_date' .
10            ' FROM c_bookmark INNER JOIN c_member' .
11            ' ON c_bookmark.c_member_id_to = c_member.c_member_id' .
12            ' WHERE c_bookmark.c_member_id_from = ?' .
13            ' ORDER BY c_bookmark.r_datetime DESC';
14    $params = array(intval($c_member_id));
15    $lst = db_get_all_page($sql, $page, $page_size, $params);
16
17    foreach ($lst as $key => $value) {
18        $lst[$key]['profile'] = db_common_c_member_profile_list4c_member_id($value['c_member_id']);
19        $lst[$key]['last_login'] = p_f_home_last_login4access_date($value['access_date']);
20    }
21
22    $sql = 'SELECT COUNT(*) FROM c_bookmark INNER JOIN c_member' .
23            ' ON c_bookmark.c_member_id_to = c_member.c_member_id' .
24            ' WHERE c_bookmark.c_member_id_from = ?';
25    $total_num = db_get_one($sql, $params);
26
27    if ($total_num === 0) {
28        $prev = $next = false;
29    } else {
30        $total_page_num =  ceil($total_num / $page_size);
31        $next = ($page < $total_page_num) ? true : false;
32        $prev = ($page > 1) ? true : false;
33    }
34
35    return array($lst, $prev, $next, $total_num);
36}
37
38function db_bookmark_is_bookmark($c_member_id_from, $c_member_id_to)
39{
40    $sql = 'SELECT c_bookmark_id FROM c_bookmark' .
41            ' WHERE c_member_id_from = ? AND c_member_id_to = ?';
42    $params = array(intval($c_member_id_from), intval($c_member_id_to));
43    return (bool)db_get_one($sql, $params);
44}
45
46/**
47 * お気に入りのメンバーIDリスト取得
48 *
49 * @param  int $c_member_id
50 * @param  bool $block  アクセスブロックしているメンバーを除外するかどうか
51 * @return array  お気に入りのメンバーID配列
52 */
53function db_bookmark_c_member_id_list($c_member_id_from, $block = false)
54{
55    $sql = 'SELECT c_member_id_to FROM c_bookmark WHERE c_member_id_from = ? ORDER BY c_bookmark_id';
56    $params = array(intval($c_member_id_from));
57    $list = db_get_col($sql, $params);
58    if ($block) {
59        $block_list = db_member_access_block_list4c_member_id_to($c_member_id_from);
60        $list = array_diff($list, $block_list);
61    }
62    return $list;
63}
64
65/**
66 * お気に入りメンバーの日記リスト
67 */
68function db_bookmark_diary_list($c_member_id, $limit)
69{
70    $bookmarks = db_bookmark_c_member_id_list($c_member_id, true);
71    if (!$bookmarks) {
72        return array();
73    }
74    $ids = implode(',', array_map('intval', $bookmarks));
75
76    $sql = 'SELECT c_diary.* FROM c_diary, c_member WHERE c_diary.c_member_id IN ('.$ids.') AND ((c_diary.public_flag = \'public\') OR (c_diary.public_flag = \'default\' AND c_member.public_flag_diary = \'public\')) AND c_diary.c_member_id=c_member.c_member_id ORDER BY r_datetime DESC';
77
78    $diary_list = db_get_all_limit($sql, 0, intval($limit));
79
80    foreach ($diary_list as $key => $value) {
81        $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id']);
82        $diary_list[$key]['nickname'] = $c_member['nickname'];
83        $diary_list[$key]['count_comments'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
84    }
85    return $diary_list;
86}
87
88/**
89 * お気に入りメンバーのBlogリスト
90 */
91function db_bookmark_blog_list($c_member_id, $limit)
92{
93    $bookmarks = db_bookmark_c_member_id_list($c_member_id, true);
94    if (!$bookmarks) {
95        return array();
96    }
97    $ids = implode(',', array_map('intval', $bookmarks));
98
99    $sql = 'SELECT * FROM c_rss_cache WHERE c_member_id IN (' . $ids . ') ORDER BY r_datetime DESC';
100    $blog_list = db_get_all_limit($sql, 0, intval($limit));
101
102    foreach ($blog_list as $key => $value) {
103        $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id']);
104        $blog_list[$key]['nickname'] = $c_member['nickname'];
105    }
106    return $blog_list;
107}
108
109/**
110 * お気に入りメンバーの日記リスト(ページャ付き)
111 */
112function db_bookmark_diary_list_with_pager($c_member_id, $page_size, $page)
113{
114    $bookmarks = db_bookmark_c_member_id_list($c_member_id, true);
115    if (!$bookmarks) {
116        return array(array(), false, false, 0);
117    }
118    $ids = implode(',', array_map('intval', $bookmarks));
119
120    $sql = 'SELECT c_diary.* FROM c_diary, c_member WHERE c_diary.c_member_id IN ('.$ids.') AND ((c_diary.public_flag = \'public\') OR (c_diary.public_flag = \'default\' AND c_member.public_flag_diary = \'public\')) AND c_diary.c_member_id=c_member.c_member_id ORDER BY r_datetime DESC';
121
122    $diary_list = db_get_all_page($sql, intval($page), intval($page_size));
123    foreach ($diary_list as $key => $value) {
124        $diary_list[$key]['c_member'] = db_common_c_member4c_member_id_LIGHT($value['c_member_id']);
125        $diary_list[$key]['count_comments'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
126    }
127
128    $sql = 'SELECT count(*) FROM c_diary WHERE c_member_id IN (' . $ids . ')';
129    $total_num = db_get_one($sql);
130
131    if ($total_num != 0) {
132        $total_page_num =  ceil($total_num / $page_size);
133        if ($page >= $total_page_num) {
134            $next = false;
135        } else {
136            $next = true;
137        }
138        if ($page <= 1) {
139            $prev = false;
140        } else {
141            $prev = true;
142        }
143    }
144    return array($diary_list, $prev, $next, $total_num);
145}
146
147/**
148 * お気に入りメンバーリスト
149 */
150function db_bookmark_member_list($c_member_id, $limit = 0)
151{
152    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
153
154    if (!$is_recurred) {  //function cacheのために再帰処理を行う
155        $is_recurred = true;
156        $funcargs = func_get_args();
157        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
158    }
159
160    $is_recurred = false;
161
162    $sql = 'SELECT c_member_id_to AS c_member_id FROM c_bookmark' .
163            ' WHERE c_member_id_from = ? ORDER BY RAND()';
164    $params = array(intval($c_member_id));
165
166    if ($limit) {
167        $result = db_get_all_limit($sql, 0, intval($limit), $params);
168    } else {
169        $result = db_get_all($sql, $params);
170    }
171
172    foreach ($result as $key => $value) {
173        $result[$key] = db_common_c_member4c_member_id_LIGHT($value['c_member_id']);
174        $result[$key]['friend_count'] = db_friend_count_friends($value['c_member_id']);
175    }
176    return $result;
177}
178
179/**
180 * お気に入りのメンバー数
181 */
182function db_bookmark_count($c_member_id)
183{
184    $sql = 'SELECT COUNT(*) FROM c_bookmark WHERE c_member_id_from = ?';
185    $params = array(intval($c_member_id));
186    return db_get_one($sql, $params);
187}
188
189/**
190 * お気に入り追加
191 */
192function db_bookmark_insert_c_bookmark($c_member_id_from, $c_member_id_to)
193{
194    //function cacheの削除
195    cache_drop_c_bookmark($c_member_id_from);
196
197    $data = array(
198        'c_member_id_from' => intval($c_member_id_from),
199        'c_member_id_to' => intval($c_member_id_to),
200        'r_datetime' => db_now(),
201    );
202    return db_insert('c_bookmark', $data);
203}
204
205/**
206 * お気に入り削除
207 */
208function db_bookmark_delete_c_bookmark($c_member_id_from, $c_member_id_to)
209{
210    //function cacheの削除
211    cache_drop_c_bookmark($c_member_from);
212
213    $sql = 'DELETE FROM c_bookmark' .
214            ' WHERE c_member_id_from = ? AND c_member_id_to = ?';
215    $params = array(intval($c_member_id_from), intval($c_member_id_to));
216    db_query($sql, $params);
217}
218
219?>
Note: See TracBrowser for help on using the repository browser.