0

WHERE 句を使用しているクエリがあります。

私の質問:

SELECT * FROM notifications WHERE recipient= '".$_SESSION['id']."' AND viewed >  
'".$twoweeksago."' OR viewed IS NULL ORDER BY recieved DESC

基本的に、クエリは、受信者がログインしているユーザーであり、表示された日付が 2 週間未満の日付であるすべてのデータ行を選択します ($twoweeksago はスクリプトで設定された変数です)。ただし、表示された列のデフォルトは 0000-00-00 00:00:00 であるため、次を使用する必要がありました。

OR viewed IS NULL

これは問題を引き起こします。前の条件にのみ適用される条件だと思いました。

 AND viewed > '".$twoweeksago."'

ただし、これは実際には WHERE 句全体の OR であり、前のすべての条件を無効にします。AND View > '".$twoweeksago."' のみに影響する OR 条件を作成するにはどうすればよいですか。

ありがとう!

4

6 に答える 6

1

次のように、条件を括弧で囲む必要があります。

SELECT * FROM notifications WHERE recipient= '".$_SESSION['id']."' AND (viewed > '".$twoweeksago."' OR viewed IS NULL) ORDER BY recieved DESC

これはうまくいくはずです。

補足として、セキュリティ違反を引き起こす可能性があるため、ユーザーから直接変数を使用しないことを忘れないでください。

于 2013-07-09T18:15:44.217 に答える
0

グループ化された句の周りに括弧を追加する必要があります。

SELECT * FROM notifications WHERE recipient= '".$_SESSION['id']."' AND (viewed >  '".$twoweeksago."' OR viewed IS NULL) ORDER BY recieved DESC
于 2013-07-09T18:14:01.330 に答える
0
SELECT * FROM notifications WHERE recipient= '".$_SESSION['id']."' AND (viewed IS NULL OR viewed > '".$twoweeksago."') ORDER BY recieved DESC

私はそれがうまくいくと信じています。

于 2013-07-09T18:14:08.467 に答える
0
SELECT * FROM notifications
WHERE recipient= '" . $_SESSION['id'] . "'
AND (
    viewed > '" . $twoweeksago . "'
    OR viewed IS NULL
)
ORDER BY recieved DESC;
于 2013-07-09T18:14:27.180 に答える
0

これを試してみてください

SELECT * FROM notifications WHERE recipient= '".$_SESSION['id']."' AND (viewed >  
'".$twoweeksago."' OR viewed=NULL ORDER BY recieved DESC
于 2013-07-09T18:15:33.730 に答える
0
SELECT *
FROM table
WHERE
receipt = session
HAVING
viewed > time OR
viewed = null
ORDER BY
sort DESC

Pdo を使用すると、例は次のようになります。

$link = new PDO('mysql:host=localhost;dbname=db', 'User', 'Pass');
$entry = $link->prepare('SELECT * FROM table WHERE receipt = :session HAVING viewed > :time OR viewed = null ORDER BY received DESC');
$entry->execute(array('session' => $Session, 'time' => $Time));

言うまでもなく、読みやすくなります。これで、台無しにする能力が少なくなりました。:3 勝つための PDO はありますか?

于 2013-07-09T18:26:10.853 に答える