【问题标题】:Medoo PHP db framework - select joinMedoo PHP 数据库框架 - 选择加入
【发布时间】:2014-07-17 13:31:20
【问题描述】:

使用 Medoo PHP 数据库框架并尝试加入

$users = $db->select(
    'users',
    [
        '[>] tournaments_users' =>
        [
            'tournaments_users.user_id' => 'users.uid'
        ]
    ], [
        'users.uid',
        'users.name',
        'users.modifier',
        'users.handicap',
        'tournaments_users.tournament_id'
    ], [
        'tournaments_users.tournament_id' => 1
        'ORDER' => 'users.username ASC'
    ]
);
foreach( $users as $u) {
    echo $u['name'].'<br>';
}

选择导致为 foreach() 提供的参数无效。

从 column-and where-section 中删除 'tournaments_users.tournament_id' 会使查询工作,但不会显示正确的数据。

为什么查询无效?

【问题讨论】:

  • var_dump($db-&gt;error()); 给你什么?
  • @oliakaoil: 我得到 array(3) { [0]=> string(5) "42S22" [1]=> int(1054) [2]=> string(64) "Unknown '字段列表'中的'tournaments_users.tournament_id'列“}。我应该以其他方式建立连接吗?

标签: php mysql medoo


【解决方案1】:

将加入选择更改为

        '[>]tournaments_users' => 
        [
            'uid' => 'user_id'
        ]

解决了无效参数的问题。

【讨论】:

    【解决方案2】:

    medoo 库 (medoo 0.9.6.2) 目前不支持在 join 子句中使用 AND/OR 连接逻辑表达式。只能使用medoo给出的query($query)方法直接执行sql查询。对于您的示例,查询如下所示:

    $data = $db->query("SELECT u.user_id, s.shirt_id FROM `cvs_users` u 
    LEFT JOIN `shirts` s 
    ON user_id = shirt_owner_id AND shirt_being_worn = 1 
    WHERE user_id = 1")->fetchAll();
    

    注意最后调用 fetchAll() 来获取查询的数据。我遇到了同样的问题,调试 medoo.php 代码发现 AND/OR 条件仅在 where 子句中考虑。也许他们会在未来的更新中加入这个功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      相关资源
      最近更新 更多