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