請問php大師-phpnewnew

來源:互聯網
上載者:User
請教php大師---phpnewnew
我有2張資料表

a表
有 欄位title

b表
也有欄位title


a表中有1000條資料,b表中有10條資料

要求:

查詢a表的title,若a.title 在 b.title中,則a.title存入 $array1中,如果sizeof($array1)>5 ,則不存。

若 若a.title 不在 b.title中,則 則a.title存入 $array2中,如果sizeof($array2)>5 ,則不存。

我的做法
PHP code
$sql="select title from a"........while($tpl2result=mysql_fetch_array($result_sql))          {              if(sizeof($array1)<5)              {               if($this->guolv($tpl2result['title']))                 array_push($array1,$tpl2result);                        }             if(sizeof($array2)<5)             {             if(!$this->guolv($tpl2result['title']))                 array_push($array2,$tpl2result);             }             if(sizeof($newtalk)==5&&sizeof($newvote)==5)             {                 break;                     exit;             }          }


questions:

這種做法極大地浪費了資源,減慢速度,向大師取經。。


------解決方案--------------------
可以google一下sql語句的 join 操作
select * from a left join b on a.title = b.title
select * from a right join b on a.title = b.title

這樣就不需要sql語句來對比兩張表了

在資料庫中,join的效率是很高的
------解決方案--------------------
就是嘛。你只要a.title表, LEFT JOIN 一次就夠了,為NULL的就是不在b表咯。
長度sql len
或php判斷下咯。
------解決方案--------------------
select title from a left join b on a.title=b.title limit 0,10
貌似這樣是限制在10條內了
------解決方案--------------------
剛睡醒,大師就別叫了,這個就不扯了,你心知肚明,我也知道.

代碼沒有經過實戰,僅僅做為思路,表必須做好索引,不過用title做索引我沒有做過測試,我的Mysql 比php掌握得還少.

PHP code
$array1 = array();$SQL = "SELECT a.title As atitle FROM a WHERE a.title in(SELECT b.title FROM b)";$mysql->query($SQL);$total = 0;while ($result = $mysql->fetch_assoc()) {    $array[] = $result['atitle'];    if ($total > 5) {        break;    }    $total++;}$array2 = array();$SQL = "SELECT a.title As atitle FROM a WHERE a.title not in(SELECT b.title FROM b)";$total = 0;while ($result = $mysql->fetch_assoc()) {    $array2[] = $result['atitle'];    if ($total > 5) {        break;    }    $total++;}
------解決方案--------------------

探討

人家又沒問你們,幹嘛多嘴呀?
何況還答錯了

------解決方案--------------------
你就b LEFT JOIN a 就好了。以b為主。

探討

引用:

select title from a left join b on a.title=b.title limit 0,10
貌似這樣是限制在10條內了


如果前面995條都不在b裡面,,從996---1000在b裡面,,似乎不行了吧,,

碰到這種需求貌似沒有妥善的解決方案,,只能按1樓的搞了,效率比我那個高
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.