我需要同时从2个表中检索数据,表格不会通过foreigns键等链接。
$query1 = "select idemployee from employee where address like 'Park Avenue, 23421'";
$query2 "select idcompany from company where bossName like 'Peter'";
如何在PHP中使用某种线程执行此操作?我听说线程在PHP中不安全。
更新:
我有一个输入字段,需要查看两个表中的数据,就像在两个表上搜索并根据员工地址或老板的名字显示可靠的结果,因此您可以键入地址或只是老板的名字。它只是我需要的表现
答案 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)个实时复制数据库,以从主数据库中卸载部分工作。