Как я могу решить проблему с двумя операторами выбора в одном запросе - PullRequest
0 голосов
/ 17 октября 2019

Я хочу получить og теги с sql на php языке, но я вижу только 1 результат - первый, который он читает, а другой я не вижу в исходном коде страницы.

это код с php.

$query = "SELECT metatitle FROM isacontent_content WHERE contentid = 12245
          UNION ALL 
          SELECT name FROM isacontent_module_anchorimage WHERE contentid = 12245";

$resimage = $conn->query($query);

if(is_array($resimage)){

    foreach ($resimage as $resItem){

        $metaData[] = $resItem->fetch_assoc();

    }

}else{

    $metaData[] = $resimage->fetch_assoc();

}
$title = $metaData[0]["metatitle"];   
$image = $metaData[0]["name"];

Я ожидаю, что оба оператора select будут работать, и я могу видеть оба содержимого в метатегах

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

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

0 голосов
/ 17 октября 2019

Для UNION ALL, имя вашего столбца должно быть таким же, или вы можете использовать ALIAS для этого.

но, здесь, в вашем примере, выможно просто использовать INNER JOIN, чтобы получить оба значения из 2 таблиц с помощью одного запроса.

Пример:

SELECT ic.metatitle, im.name FROM isacontent_content ic
INNER JOIN isacontent_module_anchorimage im ON im.contentid = ic.contentid
WHERE ic.contentid = 12245

Использование INNER JOIN, поскольку обе ваши таблицы имеют отношение, поэтому вы можете просто использовать INNER JOIN

Примечание:

Если вы знаете, что ваш запрос вернет 1 строку, то почему вы храните данные в массиве здесь $metaData[]? Вы можете просто хранить $title и $image внутри своей foreach() петли.

...