How to consolidate mysql query to show columns of two queries [duplicate] - php

I have two tables:
services
id
client
service
and
clients
id
name
email
How to list table service and bring together the customer name that the customers table? field customer services in the table has the id of the customer at the customer table,
I appreciate the help from you now

SELECT * FROM table1 LEFT JOIN table2 on table1.id = table2.id

SELECT ...
FROM services AS s
JOIN clients AS c
ON s.client = c.id
WHERE ...

SELECT ...
FROM services AS s
INNER JOIN clients AS c
ON s.client=c.id

Try this,
SELECT * from services as s INNER JOIN clients as c on s.id=c.id

Related

how to make the link between my 2 sql tables?

I cannot correctly make the link between my 2 tables, I have a table that represents my users and another with appointments but I would like to make the link between the 2 to be able to display the appointments users.
My reservation table looks like this :
[tablebooking]
My user table looks like this :
[tableusers]
What I Tried :
[test]
If your appointment functionality is one to one relation like one appointment will have only one member then you can use below query(query followed fields from your screenshots)
SELECT
M.*, B.*
FROM
members AS M
INNER JOIN bookings AS B ON B.userid = M.userid
OR
if you want to have more than one members in one appointment, you need to have tables as below
[YOUR_USERS_TABLE_NAME] => Users list
[YOUR_BOOKINGS_TABLE_NAME] => List of appointments created
[YOUR_BOOKING_MEMBERS_TABLE_NAME] => It should have list of appointment id and members id(one(appointment) to many(users) relation)
and query will be like below
SELECT
B.*, U.*
FROM
[YOUR_BOOKINGS_TABLE_NAME] AS B
INNER JOIN [YOUR_BOOKING_MEMBERS_TABLE_NAME] AS M ON M.bookingid = B.id
INNER JOIN [YOUR_USERS_TABLE_NAME] AS U on M.userid = U.id
GROUP BY B.id, U.id
Hope my answer will help you.
Please add user_id in your bookings table and then run below query in your phpmyadmin.
select * from bookings as b INNER JOIN users as u ON u.id = b.user_id
Thanks.
You probably must use an external table to connect this tables.
EX:
foo{
id: primary,
idTableUser: external key,
idTableBooking: external key
}

MySQL junction table query with or without junction

So I've got some major tables and a junction table which link a couple of the tables together in MySQL. The first major table is contacts, the 2nd is addresses and the 3rd is categories. The junction tables are contact_address which links contacts and addresses using their contact_id and address_id primary keys. I need to get the contacts with or without addresses which belong to a category called plumber...
I've currently got this:
SELECT
*
FROM
contacts T1
JOIN
contact_categories T2
USING
(contact_id)
JOIN
contact_address T3
USING
(contact_id)
JOIN
addresses T4
ON
T3.address_id = T4.address_id
WHERE
T2.general = 'Plumber'
Which works fine as long as the Plumber has an address, but what about the homeless plumbers... where are they?
You have to use a LEFT JOIN instead of an (INNER) JOIN:
SELECT
*
FROM
contacts T1 JOIN contact_categories T2
USING (contact_id)
LEFT JOIN
contact_address T3
USING (contact_id)
LEFT JOIN
addresses T4
ON T3.address_id = T4.address_id
WHERE
T2.general = 'Plumber'
An INNER JOIN returns all rows where the join operation succeeds, a LEFT JOIN returns all rows from the LEFT table, and the rows from the right table where the join succeeds, or all NULL values for the right table when the join does not. Please have a look at this visual explanations of joins.

How to list two joined tables info by name (some with name, some possible empty)

I have two tables like these
Invoice (invoice_no, invoice_date, customer_id, ...),
Customers (customer_id, customer_name, ...)
Now what I want to do is list invoices ordered by customer name.
SELECT b.customer_name, a.*
FROM Invoice a, Customers b
WHERE a.customer_id=b.customer_id
ORDER BY b.customer_name
but problem with this sql is that if there are invoices without customer_id,
how can I list those invoices first and invoices with customer_id by customer_name asc.
use LEFT JOIN instead.
"kinda" weird. How come there are some invoices that without customer? To whom are you issuing it? Anyway, here's the query.
SELECT a.*, b.* // SELECT only the columns you want
FROM Invoice a
LEFT JOIN Customers b
ON a.customer_ID = b.customer_ID
To fully gain knowledge about joins, kindly visit the link below:
Visual Representation of SQL Joins
SELECT
a.*,
b.customer_name
FROM Invoice a
LEFT JOIN Customers b ON a.customer_ID = b.customerID
Use joins instead of FROM tablea, tableb.
Because this will fetch cartisian product from both tables unless you restrict them with WHERE
Use this
SELECT * FROM Invoice,customer where Invoice.customer_id=customer.customer_id ORDER BY IF(Invoice.customer_id is NULL , Invoice.customer_id, ~Invoice.customer_id) ASC

Inner Joining with two tables

I need a little help setting up my query. I'm simply trying to access the amount of people who are in the same 'clan' by joining these two tables together, clan, users. Each users has a column 'clan' which is the same as the table clan's column 'roomOwner' and then I'm trying to get the table clan's information along with the amount of members so it would be like: room, roomOwner, members
So basically all I have is this:
SELECT c.*, count(u.clan) AS members FROM clans c inner join users u WHERE c.roomOwner = u.clan ORDER BY members;
It only shows one clan though. Any help please?
Your query has no GROUP BY clause. and I think it's only returning single record right? LEFT JOIN is needed here since there are possibilities that a clan has no member.
SELECT b.roomOwner, COUNT(a.clan) memberCount
FROM clan b
LEFT JOIN users a
ON a.clan = b.roomOwner
GROUP BY b.roomOwner
ORDER BY memberCount
You forgot GROUP BY. Do you have some "id" column in "clans" table? Group by that "id"
SELECT c.*, count(u.clan) AS members
FROM clans c
inner join users u ON c.roomOwner = u.clan
GROUP BY clans.id
And you need LEFT JOIN there instead of INNER JOIN if you want to see info about all clans, even having 0 users.
Perhaps this will help:
select c.*, count(links.id) as members
from clans c
left join users u on c.roomOwner = u,clan
group by u.clan
order by members

LEFT JOIN two tables with the same column name and print them with PHP

I have two table in my MySQL database:
USERS ('id_user' - 'id_client' -> the same as the id in CLIENTS)
CLIENTS ('id_client' - 'name' etc.)
I want to print all the clients and the respective users. This is my query:
SELECT * FROM clients AS c LEFT JOIN users AS u ON c.id_client = u.id_client
It seems to be ok, but I am having trouble when I try to print the the id_client from the table clients. How can I print them using PHP? It seems they are empty... Is my query wrong?
Try,
Either GROUP BY or DISTINCT is needed
SELECT * FROM clients AS c LEFT JOIN users AS u ON c.id_client = u.id_client GROUP BY c.id_client
SELECT c.,u. FROM clients c LEFT outer JOIN users u ON c.id_client = u.id_client
Since you have field with the same name in both tables ("id_client"), you have to specify which one to be printed.
Like so:
SELECT u.id_client, c.id_client, ... FROM clients AS c LEFT JOIN users AS u ON c.id_client = u.id_client
Simpler than that, just do the following:
SELECT c.*, u.name FROM clients AS c LEFT JOIN users AS u ON c.id_client = u.id_client
This will select everything from table c, and only name from table u. The issue you are having is you are selecting id_client from both tables, which is not necessary, and causes confusion when trying to reference it with php.

Categories