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

如果查询很慢,请尝试查看说明计划。否则,您将不得不提供更多信息,例如表结构、索引、代码等。

此外,您允许 SQL 注入。请阅读该主题并修复代码。如果您告诉您使用的是哪种语言,我可以尝试添加一些链接。否则,请查看“绑定”您的变量。

于 2012-12-21T19:05:38.263 回答