and と OR を使用して、複数のフィールドに基づいて SQL ステートメントを生成します。

WBOY
リリース: 2016-06-13 13:16:57
オリジナル
787 人が閲覧しました

複数のフィールドに基づいて SQL ステートメントを生成するには AND と OR があります。
以下に示すようなデータ テーブル情報があります。それらを SQL に結合する良い方法はありますか。すべて AND またはすべて OR の場合、この方法は簡単です。を処理しますが、両方持っている場合はどうすればよいですか?



すべてが AND または OR の場合

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
        $sql = "select * from sk_cvfilter where cvid=58 and columnname!=''";
        $query = mysql_query($sql);
        $sql = '';
        while($row = mysql_fetch_assoc($query)){
            if($row['comparator']=='eq'){$comparator="=";}
            else{$comparator=$row['comparator'];}
            $sql .=$row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].' ';
        }

ログイン後にコピー


------解決策------
SQL コード
select * from sk_cvfilter where cvid=58 and columnname!='' and andor='and' または andor='or'
<br><font color="#e78608">------解決策------------------</font><br>あなたのこの記録には問題があります。なぜですか? <br><br>例えば、(a = 1 or (b=2 and b=3)) が出た場合、どのように記録しますか? <br><br>こんな感じだと思います<br><br>columnname comparator value andor<br>a eq 1 or<br>b eq 2 and<br>c eq 3 <br><br>質問このとき、上記の関係(a=1 or (b=2 and b=3))を知らないと、<br>構造だけを見ると<br><br>( a = 1 or b =2 ) and b = 3<br><br>or<br><br> a = 1 or (b=2 and b=3)<br><br>上記の問題は考慮されていません、all or is 条件とその他の条件の書き方と<br><br><br>
ログイン後にコピー
PHP コード

<?php

$sql = "select * from sk_cvfilter where cvid=58 and columnname!=''";
$query = mysql_query($sql);
$sql = '';

//前の文が かどうかを記録します
$is_last_or = false;


while($row = mysql_fetch_assoc($query)){
    if($row['comparator']=='eq'){$comparator="=;}
    else{$comparator=$row['comparator'];}
    
    
    if($is_last_or) {
        if($row['andor'] == 'and') {
            // 次の文との関係は and で、括弧がもうすぐ終了することを示します。
            $sql .=$row['columnname'].$comparator."'".$row['value']."' ) ".$row['andor'].';
        } それ以外 {
            //括弧内の内容を続けます
            $sql .=$row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].';
        }
    elseif($row['andor'] == 'or') {
        // or がある場合は、次の文と or 関係があることを意味します (ここに括弧がないため)
        $is_last_or = true;
        //かっこを追加します
        $sql .= '( ' . $row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].' ';
    } それ以外 {
        $sql .=$row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].';
    }
    
}
<br><font color="#e78608">------解決策---------</font><br>
ログイン後にコピー
PHP コード

<?php

$sql = "select * from sk_cvfilter where cvid=58 and columnname!=''";
$query = mysql_query($sql);
$sql = '';

//前の文が かどうかを記録します
$is_last_or = false;


while($row = mysql_fetch_assoc($query)){
    if($row['comparator']=='eq'){$comparator="=;}
    else{$comparator=$row['comparator'];}
    
    
    if($is_last_or) {
        if($row['andor'] != 'or') {
            // 次の文との関係は and or end であり、括弧がまもなく終了することを示します。
            $sql .=$row['columnname'].$comparator."'".$row['value']."' ) ".$row['andor'].';
        } それ以外 {
            //括弧内の内容を続けます
            $sql .=$row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].';
        }
    elseif($row['andor'] == 'or') {
        // or がある場合は、次の文と or 関係があることを意味します (括弧がないため)
        $is_last_or = true;
        //かっこを追加します
        $sql .= '( ' . $row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].' ';
    } それ以外 {
        $sql .=$row['columnname'].$comparator."'".$row['value']."' ".$row['andor'].';
    }
    
<div class="clear"></div>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート