Одиночный вместо двойного оператора выбора

первая таблица - bplus - имеет столбец с именем home01 со значениями, идентичными некоторым значениям в столбце fname таблицы banners

$items = '';
$sql = "select home01 from bplus";
$st = $db->query($sql);
$arr = $st->fetchAll(PDO::FETCH_COLUMN);
foreach ($arr as $el){
    $el = trim($el);
    $sqlb = "select * from banners where fname = '" . $el . "'";
    $stb = $db->query($sqlb);
    $row = $stb->fetch();
    $items .= "<img class='itemtop' src = '../banners/" . $el . "' alt='img' data-id = " . $row['id'] . " data-fname = '" . $row['fname'] . ">\n"; 
}
echo $items;

это работает, но, вероятно, есть более короткий способ с одним оператором select.

Любая помощь?

Да. Используйте WHERE fname in ($el1, $el2) (то же, что и OR)

Justinas 17.04.2018 10:00

@Justinas, не могли бы вы написать всю строку, пожалуйста. Потому что количество el1, el2 ... не всегда одно и то же. Я не уверен, о чем вы думаете.

user7461846 17.04.2018 10:04

Вам нужен запрос JOIN…?

deceze 17.04.2018 10:06

@deceze, наверное, да.

user7461846 17.04.2018 10:07

Этот ответ не имеет отношения к вашему вопросу, но вы используете оператор sql без его подготовки (sqlb). Это огромная уязвимость, которой можно воспользоваться. Например, изменение el на инъекцию DROP TABLE.

Siebe.V 17.04.2018 11:13
Стоит ли изучать 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
5
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

используйте ВЛЕВО ПРИСОЕДИНИТЬСЯ

select bplus.home01, banners.* from bplus left join banners on bplus.home01 = banners.fname;
bplus.id не равен banners.id. Также мне нужны все значения столбцов из banners.
user7461846 17.04.2018 10:12

вы можете указать любое имя поля, которое принадлежит баннеру

Rahul Shrivastava 17.04.2018 10:12

вы можете указать имя поля в запросе для выбора многих полей или всех

Rahul Shrivastava 17.04.2018 10:14

Хорошо, я вижу. Что насчет where bplus.id = banners.id. ID не тот

user7461846 17.04.2018 10:14

это не работает. Мои значения из bplus - это значения COLUMN, а не значения ROW.

user7461846 17.04.2018 10:19

Позвольте нам продолжить обсуждение в чате.

Rahul Shrivastava 17.04.2018 10:19

зачем левое присоединение к одной и той же таблице, когда идентификаторы разные? кажется неэффективным?

treyBake 17.04.2018 10:20

Идентификатор @ThisGuyHasTwoThumbs отличается, но вы можете видеть здесь select home01 из bplus, он выбирает home01 из первой таблицы, а после итерации он выбирает select * из баннеров, где fname = '". $ El."', Что означает $ el = home01, поэтому bplus.home01 == Banners.fname

Rahul Shrivastava 17.04.2018 10:29

рад помочь вам

Rahul Shrivastava 17.04.2018 11:06

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