простой способ выбрать строки из всей таблицы - PullRequest
0 голосов
/ 05 мая 2019

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

<?php
$check1 = mysqli_query($con, "SELECT * FROM text WHERE keyword='$string'");
$check2 = mysqli_query($con, "SELECT * FROM sticker WHERE keyword='$string'");
$check3 = mysqli_query($con, "SELECT * FROM image WHERE keyword='$string'");
if(mysqli_num_rows($check1) == 0 && mysqli_num_rows($check2) == 0 && mysqli_num_rows($check3) == 0) {
    echo "success";
}
?>

Есть ли другой способ сократить мой сценарий выше?спасибо:)

Ответы [ 2 ]

0 голосов
/ 05 мая 2019
  1. Убедитесь, что у вас есть индекс для столбца ключевых слов всех трех таблиц , чтобы можно было избежать полного сканирования таблицы .используйте ниже для создания индекса.
    CREATE INDEX keyword ON text (keyword);
    CREATE INDEX keyword ON sticker (keyword);
    CREATE INDEX keyword ON image (keyword);
Выберите только 1 строка , если вы хотите узнать, существует ли ключевое слово в любой из 3 таблиц.
    <?php
    $check = mysqli_query($con, "SELECT 1 FROM text WHERE keyword='$string' limit 1
                                UNION SELECT 1 FROM sticker WHERE keyword='$string' limit 1
                                UNION SELECT 1 FROM image WHERE keyword='$string' limit 1");
    if(mysqli_num_rows($check) == 0 ) {
        echo "success";
    }
    ?>

Если вы хотите выбрать несколько строк из каждой таблицы, используйте предел.Я использовал 5 только для примера.


    <?php
    $check1 = mysqli_query($con, "SELECT * FROM text WHERE keyword='$string' limit 5");
    $check2 = mysqli_query($con, "SELECT * FROM sticker WHERE keyword='$string' limit 5");
    $check3 = mysqli_query($con, "SELECT * FROM image WHERE keyword='$string' limit 5");
    if(mysqli_num_rows($check1) == 0 && mysqli_num_rows($check2) == 0 && mysqli_num_rows($check3) == 0) {
        echo "success";
    }
    ?>

0 голосов
/ 05 мая 2019

Если все таблицы имеют одинаковую структуру, вы можете использовать запрос UNION для возврата строк из всех трех таблиц одновременно:

$check = mysqli_query($con, "SELECT * FROM text WHERE keyword='$string'
                             UNION
                             SELECT * FROM sticker WHERE keyword='$string'
                             UNION
                             SELECT * FROM image WHERE keyword='$string'");

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

$check = mysqli_query($con, "SELECT *, 'text' AS src FROM text WHERE keyword='$string'
                             UNION
                             SELECT *, 'sticker' AS src FROM sticker WHERE keyword='$string'
                             UNION
                             SELECT *, 'image' AS src FROM image WHERE keyword='$string'");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...