php - SQL SELECT 到多个表

标签 php mysql sql

我有一个基本的 SQL SELECT 函数:

$stmt = $mysqli->prepare("SELECT a.*,
                            b.nom_organisation
                            FROM roster a
                            INNER JOIN organisation b
                            ON a.id_organisation = b.id_organisation 
                            WHERE a.id_roster = ? LIMIT 1");

if ($stmt) {
    $stmt->bind_param('i', $id_roster);  // Bind "$email" to parameter.
    $stmt->execute();    // Execute the prepared query.
    $stmt->store_result();

// get variables from result.
$stmt->bind_result($id_roster, $nom_roster, $description_roster, $created_by, $creation_date, $nom_organisation);
$stmt->fetch(); 

我得到一个名为 $created_by 的变量

该变量是一个整数(用户 ID)。我需要访问另一个名为“member”的表。获取用户的姓名。现在我正在做另一个查询:

$stmt = $mysqli->prepare("SELECT a.first_name,
                                a.last_name
                            FROM membre a
                            WHERE a.id_membre = ? LIMIT 1");

    $stmt->bind_param('i', $created_by);  // Bind "$email" to parameter.
    $stmt->execute();    // Execute the prepared query.
    $stmt->store_result();

它正在工作,但似乎代码很多,但作用不大。有没有办法只用一个查询来做到这一点?

最佳答案

像这样怎么样:

SELECT r.id_roster
    , r.nom_roster
    , r.description_roster
    , r.created_by
    , r.creation_date
    , o.nom_organisation
    , m.first_name
    , m.last_name
FROM roster r
INNER JOIN organisation o ON r.id_organisation = o.id_organisation
INNER JOIN member m ON r.created_by = m.id_membre
WHERE r.id_roster = ? LIMIT 1

明确列出所有选定字段而不是使用 * 也是一个好习惯

关于php - SQL SELECT 到多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27108538/

相关文章:

mysql - 在 Case Function mysql 中使用别名

php - 将 MySQL 表链接到 PHP 数组

sql - SQL Server中从日期+时间获取日期最有效的方法?

SQL 不存在(在 (...) 和 (...) 之间)

php - 在 while 循环之外访问变量

php - 如何从字符串中的特定字段中删除引号?

MySQL:处理 UPDATE 语句中的 EMPTY SET

sql - 将存储过程的多个结果集存储到不同的表中

php - 在 WordPress 中将选项从后端传递到前端的最佳方法

php - 使用 print_r() 的 pretty-print 输出单行,而不是分层/组织 (PHP)