同时mysql查询+ PHP

时间:2010-09-01 20:23:20

标签: php mysql

我需要同时从2个表中检索数据,表格不会通过foreigns键等链接。

$query1 = "select idemployee from employee where address like 'Park Avenue, 23421'";
$query2   "select idcompany from company where bossName  like 'Peter'";

如何在PHP中使用某种线程执行此操作?我听说线​​程在PHP中不安全。

更新:

我有一个输入字段,需要查看两个表中的数据,就像在两个表上搜索并根据员工地址或老板的名字显示可靠的结果,因此您可以键入地址或只是老板的名字。它只是我需要的表现

6 个答案:

答案 0 :(得分:2)

使用单个查询,或查看类似Gearman之类的内容,让工作人员异步执行作业(我假设当前代码只是一个示例:如果您在那里的查询执行得非常糟糕,您想要执行他们异步。那么你很可能有数据库问题)。准备好执行任务的deamon进程相对简单。

答案 1 :(得分:1)

嗯...

$query1 = "select idemployee from employee where address like ?";
$query2 =  "select idcompany from company where bossName  like ?";

$stmt1 = $pdo->prepare($query1);
$stmt1->execute(array('Park Avenue, 23421'));
$employee = $stmt1->fetch();

$stmt2 = $pdo->prepare($query2);
$stmt2->execute(array('Peter'));
$company = $stmt2->fetch();

我错过了什么?

答案 2 :(得分:1)

可以使用MYSQLI_ASYNC和http://docs.php.net/mysqli.poll(两者仅适用于php 5.3+和mysqlnd)。
但是,您需要为每个查询单独连接到MySQL服务器。

答案 3 :(得分:0)

取决于您想对这些查询做什么。例如,如果您使用的是AJAX表单并且可以发出两个请求,则应创建单独的脚本,其中每个脚本都返回每个查询的结果。这有效地在不同的进程中运行它们,因此它们同时执行。

no such thing as threading per se in PHP,您可以看到它周围的黑客here(使用完整的流程。)

答案 4 :(得分:0)

回答我之前的事情:

创建新表

CREATE TABLE EmployeeBossXref (
    id INT auto_increment,
    employee_id INT,
    boss_id INT,
    company_id INT,
    FOREIGN KEY (employee_id) REFERENCES Employee(id),
    FOREIGN KEY (boss_id) REFERENCES Employee(id),
    FOREIGN KEY (company_id) REFERENCES Company(id)
) ENGINE=InnoDB;

然后将SQL更改为:

select Employee.name, Boss.name, Company.name FROM Employee 
JOIN EmployeeBossXref ebx ON ebx.employee_id=Employee.id 
JOIN Employee Boss ON Boss.id=ebx.boss_id
JOIN Company ON Company.id=ebx.company_id
WHERE Employee.address LIKE 'Park Avenue, 23421'
  AND Boss.name LIKE 'Peter';

有了这个系统,所有老板都是员工(他们逻辑上都是!),员工可以有多个,或者没有老板。

答案 5 :(得分:0)

你不这样做。您是否有工程原因需要这样做?

同时进行两个查询仍然会访问同一个数据库,并且数据库将执行相同的工作量。它不会让任何事情变得更快,而且,你将有额外的线程/进程的开销。

如果您确实需要更好的并发性,请考虑为SELECT查询提供第二(或第3或第4)个实时复制数据库,以从主数据库中卸载部分工作。