Web20 University

Selecting Data from Two Tables in PHP and MySQL

Last edited on
Get up to 65% Off Hosting with FREE SSL & FREE Domains!

* Web 2.0 University is supported by it's audience. If you purchase through links on our site, we may earn an affiliate commision.

Working with relational databases often involves retrieving data from multiple tables in a single query. In MySQL, this is commonly done through techniques like JOIN operations. In this post, we’ll explore how to select data in PHP from two tables using with MySQL, covering the necessary SQL queries and PHP code. Whether you’re building a reporting system or working on a complex web application, learning how to retrieve data from multiple tables is essential.

Table of Contents

  1. Introduction to Selecting Data from Two Tables
  2. Understanding SQL JOINs: INNER JOIN, LEFT JOIN, and RIGHT JOIN
  3. How to Select from Two Tables in PHP and MySQL
  4. Examples of Selecting Data from Two Tables
  5. Conclusion

1. Introduction to Selecting Data from Two Tables

In a relational database, data is often spread across multiple tables that are related by keys (e.g., foreign keys). To retrieve data that spans multiple tables, SQL provides several methods like JOIN queries and UNION statements. PHP, combined with MySQL, allows you to run these queries and fetch the results for use in your web applications.

For example, if you have two tables: users (storing user details) and orders (storing their purchase records), you might need to retrieve both user information and their order history. In such cases, a SQL query that joins these two tables would be required.


2. Understanding SQL JOINs: INNER JOIN, LEFT JOIN, and RIGHT JOIN

Before diving into examples, it’s important to understand the different types of SQL JOIN operations, which allow you to combine data from two tables:

INNER JOIN:

  • Definition: Returns records that have matching values in both tables.
  • Example: Retrieve users who have placed orders.

LEFT JOIN:

  • Definition: Returns all records from the left table, and the matched records from the right table. If no match is found, NULL values will be returned for columns from the right table.
  • Example: Retrieve all users, including those who have not placed any orders.

RIGHT JOIN:

  • Definition: Returns all records from the right table, and the matched records from the left table. If no match is found, NULL values will be returned for columns from the left table.
  • Example: Retrieve all orders, including those placed by users who may no longer be in the users’ table.

Here’s a basic diagram illustrating these joins:

Table 1: users                  Table 2: orders
| user_id | name   |             | order_id | user_id | order_date |
|---------|--------|             |----------|---------|------------|
| 1       | John   |             | 100      | 1       | 2024-01-01 |
| 2       | Jane   |             | 101      | 2       | 2024-01-03 |
| 3       | Mark   |             | 102      | 3       | 2024-01-05 |

3. How to Select from Two Tables in PHP and MySQL

To select data from two tables, you’ll typically run a SQL JOIN query from PHP and handle the results using mysqli or PDO. Let’s break down how to do this step-by-step.

Step 1: Establish a Database Connection

First, establish a connection to the MySQL database:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database_name";

$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
?>

Step 2: Write the SQL Query to Select from Two Tables

Let’s assume we have two tables, users and orders, and we want to select all users and their corresponding order details. We’ll use an INNER JOIN for this example:

SELECT users.user_id, users.name, orders.order_id, orders.order_date
FROM users
INNER JOIN orders ON users.user_id = orders.user_id;

Step 3: Execute the Query in PHP

Next, run the query in PHP and fetch the results:

<?php
$sql = "SELECT users.user_id, users.name, orders.order_id, orders.order_date 
        FROM users 
        INNER JOIN orders ON users.user_id = orders.user_id";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "User: " . $row["name"]. " - Order ID: " . $row["order_id"]. " - Order Date: " . $row["order_date"]. "<br>";
    }
} else {
    echo "No results";
}

$conn->close();
?>

4. Examples of Selecting Data from Two Tables

Example 1: INNER JOIN - Select Users with Orders

In this example, we select all users who have placed at least one order. We use the INNER JOIN to fetch data where there is a match between users and orders.

SELECT users.name, orders.order_id, orders.order_date
FROM users
INNER JOIN orders ON users.user_id = orders.user_id;

Output:

nameorder_idorder_date
John1002024-01-01
Jane1012024-01-03
Mark1022024-01-05

Example 2: LEFT JOIN - Select All Users, Including Those Without Orders

To select all users, including those who have not placed any orders, we can use a LEFT JOIN:

SELECT users.name, orders.order_id, orders.order_date
FROM users
LEFT JOIN orders ON users.user_id = orders.user_id;

Output:

nameorder_idorder_date
John1002024-01-01
Jane1012024-01-03
Mark1022024-01-05
AliceNULLNULL

In this case, “Alice” does not have any orders, but her name is still displayed, with NULL values for the order information.

Example 3: RIGHT JOIN - Select All Orders, Including Unmatched Users

A RIGHT JOIN fetches all records from the second (right) table, along with any matching records from the first (left) table. If there are any unmatched records in the users table, they are returned with NULL values.

SELECT users.name, orders.order_id, orders.order_date
FROM users
RIGHT JOIN orders ON users.user_id = orders.user_id;

Output:

nameorder_idorder_date
John1002024-01-01
Jane1012024-01-03
Mark1022024-01-05
NULL1032024-02-01

This query will return all orders, even those where the user_id no longer matches a user in the users table.


5. Conclusion

Selecting data from two tables in MySQL using PHP is a powerful technique, essential for applications where data relationships are stored in multiple tables. By understanding SQL JOIN operations like INNER JOIN, LEFT JOIN, and RIGHT JOIN, you can effectively query multiple tables and retrieve the data you need.

These SQL queries, combined with PHP’s mysqli or PDO for execution, allow you to build efficient and responsive database-driven applications. Whether you’re fetching user details along with orders, or performing more complex queries, mastering joins will be invaluable in your development toolkit.

Feel free to dive deeper into SQL JOIN operations by visiting the MySQL JOIN Documentation for more advanced use cases.


Get up to 65% Off Hosting with FREE SSL & FREE Domains!