sql >> データベース >  >> RDS >> Mysql

mysqlクエリを反復処理するforeachループからの重複した結果を無視します

    ビューを単一のセルに保存して現在のデザインを維持したい場合は、何かできることがあります。提案はしませんが、すでにこのようにプロジェクトを設計しているので、以下に例を示します。

    注意: これは、基本的な機能を確認するためのテスト例です。これは最終的なコードではないため、SQLインジェクションなどは考慮されていません。

    ビューはスペースで区切られた単一のセルに格納され、ビューが複数の単語で構成されている場合は、City-Centerなどの間に配置されると想定しています。

    この例を調べて、ニーズに合わせて調整できるかどうかを確認してください。

    <?PHP
    echo '<pre>';
    
    //mysql connect
    mysql_connect('localhost', 'root',''); 
    mysql_select_db("test"); 
    //add some tsting data
    addTestingData();
    
    //build sql from user input via $_GET   
    $sqlConditions = builtSql();//build sql conditions
    $sql = 'select * from `building` where '.$sqlConditions;//build final sql
    
    //get data from mysql
    $result  = mysql_query($sql )  ; 
    while($row=   mysql_fetch_row($result) ) 
        print_r( $row );
    
    ///////////////end//////////////////////////////////////////// 
    
    function addTestingData()
    {
    
    mysql_query("DROP TABLE IF EXISTS `Building`");
         mysql_query("
    CREATE TABLE `Building` (
      `building_uniqueid` MEDIUMINT UNSIGNED NOT NULL  , 
      `building_street` VARCHAR(30) NOT NULL,
      `building_street_nr` VARCHAR(7) NOT NULL,  
      `building_neighborhood` VARCHAR(30) NOT NULL,  
      `building_view` VARCHAR(250) NOT NULL, 
      `building_condition` VARCHAR(150) NOT NULL,  
      `building_frontage` VARCHAR(30) NOT NULL,
      `building_listprice` float NOT NULL, 
      `building_year` smallint not null,  
      `bsnss_comments` VARCHAR(255), 
      PRIMARY KEY  (`building_uniqueid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
    "); 
    
         mysql_query('
    insert into `building` (`building_uniqueid`,`building_street`,`building_street_nr`,
    `building_neighborhood`,`building_view`,`building_condition`,`building_frontage`,
    `building_listprice`,`building_year`,`bsnss_comments`) values 
    ("1","street1","strnr1","neighb1","Mountain Ocean Lake Park City-Center",
    "good","frontage1","500.3","1990","good building")
    '); 
    
         mysql_query('
    insert into `building` (`building_uniqueid`,`building_street`,`building_street_nr`,
    `building_neighborhood`,`building_view`,`building_condition`,`building_frontage`,
    `building_listprice`,`building_year`,`bsnss_comments`) values 
    ("id2","street1","strnr1","neighb2","River Ocean Lake Park City-Center",
    "very good","frontage1","800.5","1991","good building")
    ') or die(mysql_error()); 
    
         mysql_query('
    insert into `building` (`building_uniqueid`,`building_street`,`building_street_nr`,
    `building_neighborhood`,`building_view`,`building_condition`,`building_frontage`,
    `building_listprice`,`building_year`,`bsnss_comments`) values 
    ("3","street3","strnr3","neighb1","Ocean Park City-Center",
    "fantastic","frontage77","600.7","1994","good building")
    '); 
    
         mysql_query('
    insert into `building` (`building_uniqueid`,`building_street`,`building_street_nr`,
    `building_neighborhood`,`building_view`,`building_condition`,`building_frontage`,
    `building_listprice`,`building_year`,`bsnss_comments`) values 
    ("4","street4","strnr4","neighb1","Ocean Park Mountain City-Center",
    "good","frontage1","500.23","1994","good")
    '); 
    
      $_GET['Neighborhood']=array('neighb1');
      $_GET['View']=Array('Mountain','River', 'City Center');
      $_GET['Condition']=array('good','very good');
      $_GET['Frontage']=array('frontage77','frontage1');
      $_GET['minPrice']='500';
      $_GET['maxPrice']='600';
      $_GET['minYear']='1990';
      $_GET['maxYear']='1995';
    
    
    
    }
    
    
    
    function builtSql()
    {
    
      $sqlBuild = '( ';
    
    //formate sql for Neighborhood
    foreach($_GET['Neighborhood'] as $value)
        $sqlBuild .=' `building_neighborhood` = \''.$value.'\' or ';   
        $sqlBuild=removeLastOr($sqlBuild);
        $sqlBuild.=') and (';
    
    //formate sql for View
    foreach($_GET['View'] as $value) 
        $sqlBuild .=' `building_view` LIKE \'%'.str_replace(" ", "-",$value).'%\' or ';   
        $sqlBuild=removeLastOr($sqlBuild);
        $sqlBuild.=') and (';
    
     //formate sql for Condition
    foreach($_GET['Condition'] as $value) 
        $sqlBuild .=' `building_condition` = \''.$value.'\' or ';   
        $sqlBuild=removeLastOr($sqlBuild);
        $sqlBuild.=') and (';
    
     //formate sql for Frontage
    foreach($_GET['Frontage'] as $value) 
        $sqlBuild .=' `building_frontage` = \''.$value.'\' or ';   
        $sqlBuild=removeLastOr($sqlBuild);
        $sqlBuild.=') and (';
    
     //formate sql for Price
    $sqlBuild.=
    ' `building_listprice` BETWEEN \''.$_GET['minPrice'].'\' and \''.$_GET['maxPrice'].'\'   ';
        $sqlBuild=removeLastOr($sqlBuild);
        $sqlBuild.=') and (';
    
    //formate sql for Year
    $sqlBuild.=
    ' `building_year` BETWEEN \''.$_GET['minYear'].'\' and \''.$_GET['maxYear'].'\' '; 
        $sqlBuild.=')  ';
    
    return $sqlBuild;
    }
    
    function removeLastOr($str)
    {
        $tmp=substr($str ,0,(strlen($str )-2));
        return $tmp=substr($str ,0,(strlen($str )-3)); 
    }
    
    ?>
    

    いくつかのforeachループが表示されますが、ユーザーデータを含む小さなarayに対して実行されるため、心配する必要はありません。したがって、mysqlクエリが含まれないため、超高速で実行されると考えてください。

    問題が解決しない場合は、dbスキーマの詳細と基本的な説明を提供することを検討してください。これがお役に立てば幸いです!



    1. シリアル化されたデータによるmysqlの順序?

    2. OSX 10.6でPythonとDjangoでMySQLdbを使用するにはどうすればよいですか?

    3. SQL SUBSTRING()関数を使用してプロのように文字列を解析する方法は?

    4. 列の値が明確でないすべての行を選択する方法