【问题标题】:How to simplify a script如何简化脚本
【发布时间】:2016-05-24 09:05:53
【问题描述】:

我对编码还是很陌生。然而,使用 Stack Overflow 和我自己的基本知识,我创建了一个脚本,允许从数据库中搜索邮政编码并显示半径结果。部分代码还允许搜索城镇。然而,该镇位于另一个无法移动的数据库中。所以下面的代码我想简化,因为它看起来很复杂。任何人都可以帮忙吗?此外,在搜索数据库时。我想在执行此操作时添加类似“搜索”一词。

    <?php

$postcode = str_replace( '+', '%20', $postcode );
$postcode = str_replace( '!"£$^&*()?<>', '', $postcode );

include ('config.php');

$sqlstring = "SELECT * FROM postcodelatlng WHERE postcode LIKE '".$postcode." %' OR postcode = '".$postcode."' ";
$result = mysql_query($sqlstring);   

$row = mysql_fetch_assoc($result);

$lng = $row["longitude"] / 180 * M_PI;
$lat = $row["latitude"] / 180 * M_PI;

mysql_free_result($result);    

$sqlstring2 = "SELECT DISTINCT 
  postcodelatlng.postcode,
  (
    6367.41 * SQRT(
      2 * (
        1- COS(RADIANS(postcodelatlng.latitude)) * COS(".$lat.") * (
          SIN(RADIANS(postcodelatlng.longitude)) * SIN(".$lng.") + COS(RADIANS(postcodelatlng.longitude)) * COS(".$lng.")
        ) - SIN(RADIANS(postcodelatlng.latitude)) * SIN(".$lat.")
      )
    )
  ) AS Distance 
FROM
  postcodelatlng AS postcodelatlng 
HAVING Distance <= '".$radius."'
ORDER BY Distance ";

$i = 1;

$result1 = mysql_query($sqlstring2) or die('query failed: ' . mysql_error());
    while($row = mysql_fetch_array($result1)){
        $searchlets = "SELECT * FROM property_details WHERE postcode = '".$row['postcode']."' ";
                $getresult = mysql_query($searchlets);
                    while($row2 = mysql_fetch_array($getresult)) {

                        echo '  <div class="container">
        <div class="row">
            <a href="viewprop.php?id='.$row2[0].'" target="_blank">
                <div class="col-md-12"> 
                    <div class="col-md-12 col-md-offset-0 innerResults col-xs-12" align="justify">
                        <div class="col-md-2 col-xs-12">
                            <img src="images/rentals/1.jpg" width="80%" height="80%" />
                        </div>
                        <div class="col-md-8 col-xs-12">
                            <h3 class="rbgclr1" style="text-align:left;">'. $row2[13]. '</h3>
                            <hr>
                            <p class="rbgclr1" style="text-align:left;">'. $row2[9]. '</p>
                        </div>
                        <div class="col-md-2 col-xs-12">
                            <h4 class="rbgclr2">£'. $row2[2]. ' Per Month</h3>
                            <h5 class="rbgclr1">£'. $row2[3]. ' Deposit</h4>
                            <br />
                            <p class="rbgclr1">Bedrooms = '. $row2[4]. '</p>
                            <div class="fb-share-button" data-href="viewprop.php?id='.$row2[0].'" data-layout="button_count" data-mobile-iframe="true"></div>
                        </div>
                    </div>
                </div>
            </a>
        </div>
    </div>
            <br />';
            if ($i != 0 && $i%2 == 0)
   echo '<hr/>';
                    }


    }


$searchlets2 = "SELECT * FROM property_details WHERE street = '".$postcode."' ";
                $getresult2 = mysql_query($searchlets2);
                    while($row3 = mysql_fetch_array($getresult2)) {
                        echo '  <div class="container">
        <div class="row">
            <a href="viewprop.php?id='.$row3[0].'">
                <div class="col-md-12"> 
                    <div class="col-md-12 col-md-offset-0 innerResults col-xs-12" align="justify">
                        <div class="col-md-2 col-xs-12">
                            <img src="images/rentals/1.jpg" width="80%" height="80%" />
                        </div>
                        <div class="col-md-8 col-xs-12">
                            <h3 class="rbgclr1" style="text-align:left;">'. $row3[13]. '</h3>
                            <hr>
                            <p class="rbgclr1" style="text-align:left;">'. $row3[9]. '</p>
                        </div>
                        <div class="col-md-2 col-xs-12">
                            <h4 class="rbgclr2">£'. $row3[2]. ' Per Month</h3>
                            <h5 class="rbgclr1">£'. $row3[3]. ' Deposit</h4>
                            <br />
                            <p class="rbgclr1">Bedrooms = '. $row3[4]. '</p>
                            <div class="fb-share-button" data-href="viewprop.php?id='.$row3[0].'" data-layout="button_count" data-mobile-iframe="true"></div>
                        </div>
                    </div>
                </div>
            </a>
        </div>
    </div>
            <br />';
            if ($i != 0 && $i%2 == 0)
   echo '<hr/>';
                    }

mysqli_close($con); 

?>

【问题讨论】:

  • 我建议你不要使用像 $result1 和 $result2 这样的名字。这还不清楚。此外,不推荐使用 mysql 并尝试将您的代码与您的视图分开。
  • 好的,现在改了。
  • 我建议使用一些 MVC 框架(基本上是拆分 HTML 代码和 PHP 代码)并尝试学习一些 javascript 和 AJAX。否则无法在页面上编写搜索并在搜索完成后显示结果。

标签: php mysql sql optimization


【解决方案1】:
    postcode LIKE '".$postcode." %'
 OR postcode  =   '".$postcode."'

可以通过简单的操作来简化(和加速)

    postcode LIKE '".$postcode." %'

你需要

INDEX(postcode)

(我不会涉足 HTML 代码;这是错误的论坛。请将代码简化为大部分 SQL。)

distance 公式需要扫描整个表格。这是否足够快取决于该表有多大。

您可以使用类似的语法从不同的数据库(在同一个保护程序上)获取数据

FROM db1.tableA JOIN db2.tableB ON ...

使用JOIN,而不是从一个表中获取,然后从另一个表中获取。

不要不要使用mysql_*接口;它已被弃用,很快就会消失。切换到mysqli_*PDO。不要不要混合它们! (最后看到mysqli_close。)

清理这些东西,然后重新开始提问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多