Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从两个表中选择,而不重复所有值_Php_Mysql_Pdo - Fatal编程技术网

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)
               )
)
  • 如果你能指出我代码中一些不必要的代码,那就太好了

您所描述的内容不可能只使用一条sql语句。你可以把结果想象成一张桌子。在普通sql中不能有任何嵌套信息

我们可以选择数据库来存储和检索对象

然而,我认为你真正想要的是选择

从:

MySQL允许在一条语句中有多条语句 一串一次发送多条语句可以减少客户端服务器的开销 往返,但需要特殊处理

必须使用执行多个语句或多个查询 . 声明中的个别声明 字符串用分号分隔。然后,返回的所有结果集 必须提取已执行的语句

MySQL服务器允许使用不返回结果集的语句 和不在一个或多个语句中返回结果集的语句 声明

对于PDO,来自:


尝试添加
选择不同的作业。作业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