Простые способы выбора строк из всей таблицы

я хочу выбрать некоторые строки в моих базах данных 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";
}
?>

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
39
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если все таблицы имеют одинаковую структуру, вы можете использовать запрос 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'");

если у меня есть таблица с другой структурой, но в таблице те же строки, могу ли я использовать UNION?

titan 05.05.2019 05:58

@титан нет; UNION требует, чтобы все SELECT возвращали одинаковое количество (и предпочтительно тип, хотя может произойти некоторое жонглирование типами) столбцов. В этом случае вы можете использовать JOIN, но вам нужно будет указать псевдонимы столбцов, чтобы столбцы из разных таблиц с одинаковыми именами не перезаписывали друг друга в выходном массиве.

Nick 05.05.2019 06:01
  1. Убедитесь, что у вас есть индексировать столбец ключевых слов всех 3 таблиц, чтобы завершить сканирования таблицы можно избежать. используйте ниже, чтобы создать index.
    CREATE INDEX keyword ON text (keyword);
    CREATE INDEX keyword ON sticker (keyword);
    CREATE INDEX keyword ON image (keyword);
  1. Выберите только 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";
    }
    ?>

Если вы хотите выбрать несколько строк из каждой таблицы, используйте limit. Я использовал 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";
    }
    ?>

Другие вопросы по теме