1

私はデータベースからの読み取りにこのコードを使用していますが、得られる結果は少し遅いです。だから私はその問題についていくつかの助けが必要です。

SELECT mod_part.id AS mp_id,parts.id as part_id,outlets.name as out_name, parts.part_name as part_name, parts.brand, outlets.sell, outlets.cost, outlets.qty, outlets.comp, parts.supplier, brands.name AS brand_name 
FROM outlets,models,manufacturers,brands,parts,mod_part 
WHERE outlets.part_id=mod_part.id 
      AND mod_part.part_id=parts.id 
      AND brands.id=mod_part.brand_id 
      AND mod_part.model_id=models.id 
      AND parts.man_id=manufacturers.id 
      AND (MATCH (manufacturers.name) AGAINST ('".$_GET['search']."') 
      OR MATCH (parts.part_name) AGAINST('".$_GET['search']."') 
      OR MATCH(models.name) AGAINST('".$_GET['search']."')) 
GROUP BY parts.id
4

2 に答える 2

1

あなたは内部結合でこれを試すことができます

$search = mysql_real_escape_string($_GET['search']);  // escape from sql injection here

次に、SQLで使用します(代わりにPDOまたはSQLIを使用してください)

"SELECT mo.id AS mp_id,p.id as part_id,o.name as out_name,p.part_name as part_name,p.brand,o.sell,o.cost,o.qty,o.comp,p.supplier,b.name AS brand_name 
 FROM outlets 
 INNER JOIN models m  ON  m.id = mo.model_id
 INNER JOIN parts p ON  mo.part_id= p.id 
 INNER JOIN manufacturers ma ON p.man_id=ma.id 
 INNER JOIN brands b ON  bid=mo.brand_id
 INNER JOIN mod_part mo ON mo.part_id=mo.id 

WHERE 
   (MATCH (ma.name)  AGAINST ('".$search."')
   OR MATCH (p.part_name)  AGAINST('".$search."') 
   OR MATCH(m.name)  AGAINST('".$search."'))
GROUP BY p.id ";
于 2012-12-21T19:16:26.230 に答える
0

クエリが遅い場合は、explainプランを見てみてください。それ以外の場合は、テーブル構造、インデックス、コードなどの詳細情報を提供する必要があります。

また、SQLインジェクションを許可しています。その件について読んで、コードを修正してください。使用している言語がわかれば、リンクを追加してみることができます。それ以外の場合は、変数の「バインド」を調べてください。

于 2012-12-21T19:05:38.263 に答える