первая таблица - 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.
Любая помощь?
@Justinas, не могли бы вы написать всю строку, пожалуйста. Потому что количество el1, el2 ... не всегда одно и то же. Я не уверен, о чем вы думаете.
@deceze, наверное, да.
Этот ответ не имеет отношения к вашему вопросу, но вы используете оператор sql без его подготовки (sqlb). Это огромная уязвимость, которой можно воспользоваться. Например, изменение el на инъекцию DROP TABLE.






используйте ВЛЕВО ПРИСОЕДИНИТЬСЯ
select bplus.home01, banners.* from bplus left join banners on bplus.home01 = banners.fname;
bplus.id не равен banners.id. Также мне нужны все значения столбцов из banners.
вы можете указать любое имя поля, которое принадлежит баннеру
вы можете указать имя поля в запросе для выбора многих полей или всех
Хорошо, я вижу. Что насчет where bplus.id = banners.id. ID не тот
это не работает. Мои значения из bplus - это значения COLUMN, а не значения ROW.
Позвольте нам продолжить обсуждение в чате.
зачем левое присоединение к одной и той же таблице, когда идентификаторы разные? кажется неэффективным?
Идентификатор @ThisGuyHasTwoThumbs отличается, но вы можете видеть здесь select home01 из bplus, он выбирает home01 из первой таблицы, а после итерации он выбирает select * из баннеров, где fname = '". $ El."', Что означает $ el = home01, поэтому bplus.home01 == Banners.fname
рад помочь вам
Да. Используйте
WHERE fname in ($el1, $el2)(то же, что иOR)