Два SQL-запроса в одном sql

0

У меня есть два запроса, которые я хочу объединить, чтобы получить информацию из двух разных таблиц в один массив.

 $stmt = $pdo->query("SELECT * FROM Product WHERE id=". $productid);
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        $itemData = array(
            'id' => $row['id'],
            'name' => $row['name'],
            'unitprice' => $row['unitprice'],
            'quantity' => 1
        );

Я хотел бы добавить это к тому же stmt

SELECT size FROM ProductDetails where id=".$productid);

а затем массив $ itemData следующим образом:

$itemData = array(
                'id' => $row['id'],
                'name' => $row['name'],
                'size' => $row['size'],
                'unitprice' => $row['unitprice'],
                'quantity' => 1
            );

Есть ли способ сделать это? Спасибо.

  • 0
    'select p.*, d.size from Product p join ProductDetails d using(id) where id=". $productid'.'";'
Теги:

3 ответа

0
Лучший ответ

Используйте соединение в своем SQL-запросе и выберите только нужные вам поля.

$stmt = $pdo->query("SELECT p.id, p.name, pd.size, p.unitprice FROM Product as p INNER JOIN ProductDetails as pd ON p.id = pd.productid WHERE p.id=". $productid);
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    $itemData = array(
        'id' => $row['id'],
        'name' => $row['name'],
        'size' => $row['size'],
        'unitprice' => $row['unitprice'],
        'quantity' => 1);
  • 0
    благодарю вас! Это сработало идеально, как я и хотел - Отличный материал!
1

Вы хотите использовать левое соединение здесь

Предложение MySQL LEFT JOIN позволяет запрашивать данные из двух или более таблиц базы данных. Предложение LEFT JOIN является необязательной частью инструкции SELECT, которая появляется после предложения FROM.

Итак, в вашем примере:

SELECT * FROM Product 
LEFT JOIN ProductDetails ON ProductDetails.product_id = Product.product_id
WHERE id=". $productid
  • 0
    В чем разница между левым и внутренним соединениями?
  • 0
    INNER JOIN получает все записи, которые являются общими для обеих таблиц, на основе внешнего ключа. LEFT JOIN получает все записи из таблицы LEFT, но если вы выбрали несколько столбцов из таблицы RIGHT, если нет связанных записей, эти столбцы будут содержать NULL. Хорошее резюме можно найти здесь: stackoverflow.com/questions/5706437/…
Показать ещё 1 комментарий
0

Попробуйте использовать соединение:

SELECT p.*, pd.size
FROM Product p
INNER JOIN ProductDetails pd
    ON p.id = pd.productid;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню