Php 从两个表中选择,而不重复所有值
让我澄清一下,我的问题是“如何在不重复值的情况下从绑定单个表和交叉引用表中选择行?” 现在我有三个表,一个交叉参考表和两个单表:Php 从两个表中选择,而不重复所有值,php,mysql,pdo,Php,Mysql,Pdo,让我澄清一下,我的问题是“如何在不重复值的情况下从绑定单个表和交叉引用表中选择行?” 现在我有三个表,一个交叉参考表和两个单表: Table jobs ╔══════════╦══════════════════════════╗ ║ job_id ║ details ║ ╠══════════╬══════════════════════════╣ ║ 1 ║ Looking for hire... ║ ║
Table jobs
╔══════════╦══════════════════════════╗
║ job_id ║ details ║
╠══════════╬══════════════════════════╣
║ 1 ║ Looking for hire... ║
║ 2 ║ We need help!... ║
║ 3 ║ We are a store that... ║
║ 4 ║ Help wanted... ║
╚══════════╩══════════════════════════╝
Table job2pos
╔═══════════╦═════════════╗
║ job_id ║ position_id ║
╠═══════════╬═════════════╣
║ 1 ║ 10 ║
║ 2 ║ 10 ║
║ 2 ║ 12 ║
║ 3 ║ 11 ║
║ 3 ║ 13 ║
║ 4 ║ 10 ║
╚═══════════╩═════════════╝
Table positions
╔═══════════════╦═══════════════╗
║ position_id ║ position_name ║
╠═══════════════╬═══════════════╣
║ 10 ║ waitress ║
║ 11 ║ cashier ║
║ 12 ║ cook ║
║ 13 ║ chef ║
╚═══════════════╩═══════════════╝
执行此查询时:
$sql = "SELECT jobs.details, positions.name AS position FROM jobs
INNER JOIN job2pos ON jobs.job_id = job2pos.job_id
INNER JOIN positions ON job2pos.position_id = positions.position_id
WHERE job2pos.job_id IN (2)";
...
print_r($stmt->fetchAll(\PDO::FETCH_ASSOC));
我得到以下信息:
Array(
[0] => Array ([details] => We need help!...
[position] => Waitress)
[1] => Array ([details] => We need help!...
[position] => Cook)
)
现在我为同一个作业得到了两行,但我想要的是类似于此的内容:
Array(
[0] => Array ([details] => We need help!...
[position] => Array ([0] => Waitress
[1] => Cook)
)
)
- 如果你能指出我代码中一些不必要的代码,那就太好了
尝试添加
选择不同的作业。作业id
?您可能需要将查询分为两个单独的查询。它正在按应有的方式工作。@user3360140已尝试,但不起作用:请先尝试选择作业详细信息(对于id 2)然后,当您使用foreach
或while
迭代该查询的结果集时,尝试选择与该作业匹配的所有位置。请查看此处接受的答案:对于以下情况:PHP以获得嵌套列表,而不需要“复杂”查询:
$stmt = $db->query("SELECT 1; SELECT 2;");
$stmt->nextRowset(); //Move to next statement result
var_dump( $stmt->fetchAll(PDO::FETCH_ASSOC) ); //SELCT 2 result