У меня есть таблица «imageposts», которую я делаю left join с таблицей «users», так что, если есть сообщение с изображением, оно извлекает данные для пользователя, который сделал это сообщение с соответствующим изображением.

Эти две таблицы связаны, потому что столбец user_id в таблице imageposts является внешним ключом столбца id в таблице users.

Хотя приведенный ниже код работает, когда есть сообщение с изображением, он в настоящее время извлекает все поля из таблицы 'users' с запросом MySQL (всего 12 столбцов), и я использую только 2 из этих столбцов (имя и фамилия. ), что кажется чрезмерным / не лучшим решением?

Я пытаюсь понять, как извлечь только два поля (имя и фамилию) из «пользователей», выбирая все из таблицы «imageposts»?

Любая помощь очень ценится.

<?php

    $stmt = $connection->query("SELECT * FROM imageposts left join users on imageposts.user_id = users.id");

    while ($row = $stmt->fetch()) {

        // from imageposts table (every column in the table is used)
        $db_image_id = htmlspecialchars($row['image_id']);
        $db_image_title = htmlspecialchars($row['image_title']);
        $db_image_tags = htmlspecialchars($row['image_tags']);
        $db_image_filename = htmlspecialchars($row['filename']);
        $db_ext = htmlspecialchars($row['file_extension']);
        $db_processed= htmlspecialchars($row['user_processed']);
        $db_username = htmlspecialchars($row['username']);
        $db_profile_image_filename = htmlspecialchars($row['profile_image']);

        // from users table (only 2 of the 12 columns returned in the query are used)
        $db_firstname = htmlspecialchars($row['firstname']);
        $db_lastname = htmlspecialchars($row['lastname']);

    ?>

    <figure>
        <!-- HMTL output goes here including the above variables  -->
    </figure>

<?php } ?>
0
paulo_cam 17 Сен 2021 в 03:39

2 ответа

Первое, что вы можете сделать, это определить все имена столбцов, которые вы хотите, из обеих таблиц в селекторе

<?php 
    query("select IP.col1 ,IP.col2 ,U.col3 FROM imageposts IP inner join users U on IP.user_id = U.id")
?>

Таким образом mysql будет возвращать значения только из выбранных столбцов, что эффективно, и еще одна вещь, которую вы можете сделать, - это создать отдельное представление для пользовательской таблицы и выбрать только два столбца, которые вы хотите, а затем внутреннее объединить это представление с вашими сообщениями с изображениями

1
Amir Rahman 17 Сен 2021 в 01:10

Вы используете INNER JOIN вместо LEFT JOIN.

Это позволит вам отображать только 3 значения из таблицы пользователей, если вам нужно отобразить больше, вам нужно добавить их в запрос.

SELECT imgp.*, users.id, users.firstname, users.lastname
FROM imageposts AS imgp
LEFT JOIN users ON imgp.user_id = users.id
1
Dlk 17 Сен 2021 в 01:14