PHP SQL / multible select request / slow

У меня есть 2 запроса в базе данных SQL. Загрузка всего скрипта / страницы занимает очень много времени. Есть ли лучший (более быстрый) способ? Мой код выглядит так:

    $abfrage = "SELECT * FROM table_a WHERE state = '0' ORDER BY EDIT DESC";
        $stmt = $pdo->query($abfrage);

        foreach($stmt as $data) { ?>

$usern = $data['user_name'];
$stmt = $pdo->query("SELECT * FROM tabl_b WHERE user_name = '$usern' ORDER BY follower DESC Limit 1");
$stmt->execute();
$pl = $stmt->fetch();

<?php echo $data['ID'];?>
        <?php echo $data['ID'];?>

        <?php if ($data['company'] == '') { ?>
        <a href="https://open.spotify.com/user/<?php echo $data['user_name'];?>" target="_blank"><?php if ($data['state'] == '3') { echo "<span style="color:#0000FF";>".$data['user_name']."</span>"; } else { echo $data['user_name'];}?></a>
        <?php } else {?>

        <a href="https://open.spotify.com/user/<?php echo $data['user_name'];?>" target="_blank"><?php if ($data['state'] == '3') { echo "<span style="color:#0000FF";>".$data['company']."</span>"; } else { echo $data['company'];}?></a>

        <?php } ?>

        <?php echo $data['PL_read'];?>
        <?php echo $data['PL_total'];?>
        <?php echo $data['country'];?>
        <?php echo $data['EDIT'];?>
    <?php echo $pl['follower'];?>
        <?php } ?>

У меня есть таблица вокруг эхо-данных. Мне было бы здорово, если бы кто-нибудь мог дать мне совет.

php,pdo,

1

Ответов: 2


2 принят

Сначала, если у таблиц есть отношение, я предлагаю вам взять данные в одном вызове с присоединением.

SELECT * FROM table_a a
LEFT JOIN tabl_b b ON a.user_name = b.user_name
WHERE a.state = '0'

Во-вторых, для ускорения того, что вы можете поместить INDEX в два поля, которые вы используете в предложении WHERE - state, user_name

ALTER TABLE `table_a` ADD INDEX `state` (`state`)
ALTER TABLE `tabl_b` ADD INDEX `user_name` (`user_name`)

0
  1. Когда дело доходит до времени загрузки, мы должны получать только те столбцы из таблицы, которые требуются. Поэтому в первом запросе мы можем получить имя пользователя, идентификатор, компанию, PL_read, PL_total, страну, EDIT

  2. Поскольку запрос, который запускается внутри цикла, также потребует времени, поэтому, чтобы избежать этого, используйте ниже код

        $dataArray = array();
        $userName = NULL;
        $abfrage = "SELECT ID, user_name, company, PL_read, PL_total, country, EDIT FROM table_a WHERE state = '0' ORDER BY EDIT DESC";
        $stmt = $pdo->query($abfrage);
    
        foreach($stmt as $data) {
            //creating a string
            if (is_null($userName))
            {
                $userName = "'" . $data['user_name'] . "'";
            }
            else
            {
                $userName .= ",'" . $data['user_name'] . "'";
            }
            $dataArray[$userName] = $data;
        }
    
        $stmt = $pdo->query("SELECT follower, user_name FROM tabl_b WHERE      user_name IN ($userName) ORDER BY follower");
    
        foreach($stmt as $data) { 
            if(isset($dataArray[$userName]))
            {
                $dataArray[$userName]['follower'] = $data['follower'];
            }
            else
            {
                $dataArray[$userName]['follower'] = 'N/A';
            }
        }
    
        foreach($dataArray as $data) { 
                echo $data['ID'];?>
                <?php echo $data['ID'];?>
    
                <?php if ($data['company'] == '') { ?>
                    <a href="https://open.spotify.com/user/<?php echo $data['user_name'];?>" target="_blank"><?php if ($data['state'] == '3') { echo "<span style="color:#0000FF";>".$data['user_name']."</span>"; } else { echo $data['user_name'];}?></a>
                <?php } else {?>
                    <a href="https://open.spotify.com/user/<?php echo $data['user_name'];?>" target="_blank"><?php if ($data['state'] == '3') { echo "<span style="color:#0000FF";>".$data['company']."</span>"; } else { echo $data['company'];}?></a>
    
                <?php } ?>
    
                <?php echo $data['PL_read'];?>
                <?php echo $data['PL_total'];?>
                <?php echo $data['country'];?>
                <?php echo $data['EDIT'];?>
                <?php echo $pl['follower'];?>
     <?php } ?>
PHP, PDO,
Похожие вопросы