繁体   English   中英

MYSQL - 如何使用 SELECT 作为我的 WHERE

[英]MYSQL - How do I use a SELECT as my WHERE

我有两个表recordingsrecording_metas _元数据,我想选择一些元数据并使用这些元数据中的外键来查找相应的记录。 这是我到目前为止。 $recording_sql输出这个

SELECT recording FROM recordings 
    INNER JOIN recording_metas 
    ON recordings.id = recording_metas.recording_id
    WHERE recording_metas.recording_id IN (SELECT recording_id, meta_key, meta_value FROM recording_metas WHERE meta_key=? AND meta_value=?) LIMIT ?

但是为什么我会收到以下错误?

Fatal error:  Uncaught Error: Call to a member function bind_param() on bool

在这一行$stmt->bind_param(str_repeat('s', count($mixed)), ...$mixed); 我确信$meta_sql可以工作,因为我在那里用 LIMIT 指针单独测试了它,所以如果我在$meta_sql上使用它们,指针工作正常

PHP

function retrieveRecordingsByMetaData($connection, $config, $metas, $limit)
{
    $where = "";
    for ($i = 0; $i < count($metas); $i++) {
        $where .= "meta_key=? AND meta_value=? AND ";
    }
    $where = preg_replace('/ AND $/', '', $where);

    $meta_sql = "SELECT recording_id, meta_key, meta_value FROM $config->meta_table WHERE $where";

    $recording_sql = "SELECT recording FROM $config->recording_table 
    INNER JOIN $config->meta_table 
    ON $config->recording_table.id = $config->meta_table.recording_id
    WHERE $config->meta_table.recording_id IN ($meta_sql) LIMIT ?";

    echo ($recording_sql);

    $stmt = $connection->prepare($recording_sql);

    $mixed = associativeToArrayMixed($metas);
    array_push($mixed, $limit);
    $stmt->bind_param(str_repeat('s', count($mixed)), ...$mixed);

    if (!$stmt->execute()) {
        echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error . " \r\n";
        die();
    }

    $result = $stmt->get_result();
    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            echo "recording found";
        }
    } else {
        echo "0 results \r\n";
    }
}

您只需在 where 子句中选择一列

WHERE recording_metas.recording_id IN 
  (SELECT recording_id FROM recording_metas WHERE meta_key=? AND meta_value=?) LIMIT ?

如果要选择多于一列,则必须使用如下所示的 tupels https://stackoverflow.com/a/44706402/5193536

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM