私は次の sql ステートメントを持っています。これは完璧に機能します。すべてを PDO に転送しているため、この複雑なステートメントを変換しようとして最悪の時間を過ごしました。ここでは、以下で動作しています:
$sql_res=mysql_query("SELECT a.first_name, a.last_name, a.uid, a.hometown,
IF(b.friend_two IS NULL, 0, 1) AS isFriend FROM users a LEFT JOIN friends
b ON a.uid = b.friend_two AND b.friend_one = $uid WHERE
CONCAT(a.first_name, ' ', a.last_name) LIKE '%$q%' AND a.uid <> $uid
ORDER BY isFriend DESC");
私は何時間も変換しようとしてきましたが、これが別のSOの例から得ることができるすべてです(動作に近づいていません)
どんな助けでも素晴らしく感謝しています。ああ、また $q はユーザーからの POST 変数であるため、私の場合は PDO が必須です。
更新されたコード (2 回目):
$sql = "select a.first_name, a.last_name, a.uid, a.hometown,
IF(b.friend_two IS NULL, 0, 1) AS isFriend FROM users a LEFT JOIN
friends b ON a.uid = b.friend_two AND b.friend_one = :friend_one
where ( first_name like concat('%', :fname, '%') or last_name like
concat('%', :lname, '%') ) and a.uid <> :uid ORDER BY isFriend DESC";
$stmt= $db->prepare($sql); $stmt->bindValue(':fname', "%$q%", PDO::PARAM_STR);
$stmt->bindValue(':lname', "%$q%", PDO::PARAM_STR);
$stmt->execute(array(':friend_one' => $uid,':uid' => $uid));
これはエラーなしで機能しますが、元の sql ステートメントと同じ結果を生成できません。