я хочу выбрать некоторые строки в моих базах данных 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";
}
?>
есть ли другой способ сократить мой сценарий выше? Спасибо :)






Если все таблицы имеют одинаковую структуру, вы можете использовать запрос 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 требует, чтобы все SELECT возвращали одинаковое количество (и предпочтительно тип, хотя может произойти некоторое жонглирование типами) столбцов. В этом случае вы можете использовать JOIN, но вам нужно будет указать псевдонимы столбцов, чтобы столбцы из разных таблиц с одинаковыми именами не перезаписывали друг друга в выходном массиве.
CREATE INDEX keyword ON text (keyword);
CREATE INDEX keyword ON sticker (keyword);
CREATE INDEX keyword ON image (keyword);
<?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";
}
?>
если у меня есть таблица с другой структурой, но в таблице те же строки, могу ли я использовать UNION?