この関数を使用して、パラメーターに応じてテーブルからアイテムをリストしhelps
ています: (ほとんどのコードを含めましたが、実際には mysql クエリに集中することができます)
function list_helps($by,$value,$page = -1,$ipp = 20){
/* Yes I concatenate querys... so i use some variables to help it a bit */
$sql = 'SELECT helps.* FROM helps ';
$where = ''; $orderBy = ''; $in = ''; $join = ''; $limit = ''; $resultitems = ''; $header = '';
if($page > 0) $limit = 'LIMIT '.$page*$ipp.', '.($page+1)*$ipp; else $limit = 'LIMIT 10';
switch($by){
case 'byuser':
$where = 'WHERE id_user ='.$value;
$orderBy = 'ORDER BY id DESC';
break;
case 'byfriend':
$sql = 'SELECT
h.*,
f.*
FROM (
SELECT
id,
CASE followerid WHEN '.$value.' THEN followingid ELSE followerid END AS friend_id
FROM friends
WHERE acepted = 1
AND (followerid = '.$value.' OR followingid = '.$value.')
) AS f
INNER JOIN helps AS h ON h.id_user = f.friend_id
ORDER BY h.id DESC';
break;
default:
break;
}
$sql .= $where.' '.$orderBy.' '.$limit;
$res = cache_query($sql,'',60*60*5);
/* checks in cache first, if not; executes query.. next code it's to render content */
}
もっと多くのケースがありますが、これらの 2 つに焦点を当てましょう。
どちらも、要求されている「ヘルプ」を提供します (ユーザーの場合、またはユーザーの友人の場合)。問題は、それらのコメントを取得しようとしているときです (ブログ投稿の場合など)。私はそうしています:
res = cache_query('SELECT help_replies.content, help_replies.date,
help_replies.offers, help_replies.accepted, help_replies.id_responds,
usuarios.first_name, usuarios.last_name, usuarios.avatar,usuarios.id
FROM help_replies left join usuarios
ON help_replies.id_user = usuarios.id
WHERE help_replies.id_responds = '.$this->id.'
ORDER BY help_replies.id ASC', '', 30);
foreach($res as $obj) {
/* $obj['id_responds'] */
}
}
問題は、アイテムを参照することです。そのhelp_replies.id_responds
ため、ケースが「byuser」の場合は問題ありません。しかし、ケースが「byfriend」の場合、このフィールドは失われます (したがって、常に同じコメントが表示されます)
結論:
- byuser -> Helps fine & comments fine
- byfriend -> うまくいきます (これは奇妙です) & コメントが間違っています
$this->id が (JOINED) クエリから期待どおりにならない理由はありますか?
-編集-
$this->id は、この構成メソッドから取得されます (多くの属性を省略しました)
function __construct($item) {
$this->id = $item['id'];
$this->id_user = $item['id_user'];
..
}
$item は foreach の 1 つの反復です (したがって、返された行は配列に変換されます)
ムチャス・グラシアス