Php запрос 2 таблицы mysql с датами МЕЖДУ и несколькими предложениями

У меня есть 2 таблицы с именем Квитанции и материалы_Квитанции_Наценка

Мне нужно запросить эти таблицы mysql между конкретными датами ввода пользователя из формы, а также условием, которое будет искать все даты от определенного пользователя (techID) из обеих таблиц. У меня есть жесткий идти на это до сих пор и не думаю, что я даже близко. Вот что у меня есть до сих пор

"SELECT Receipts.TechID, Receipts.TotalPrice, Receipts.TotalProfit,
Receipts.Date, Materials_Receipts_Markup.Markup, 
Materials_Receipts_Markup.DateOfReceipt,
Materials_Receipts_Markup.TechID".

"FROM Receipts, Materials_Receipts_Markup".

"WHERE Receipts.Date BETWEEN '$newStartDate' AND '$newEndDate' AND WHERE
Materials_Receipts_Markup.DateOfReceipt BETWEEN '$newStartDate' AND
'$newEndDate'".

"AND Receipts.TechID AND Materials_Receipts_Markup.TechID ='$FormTechID' ";

$newStartDate и $newEndDate - это даты, например 2019-06-23.

мои навыки sql еще не на должном уровне для чего-то такого сложного. Любая помощь будет оценена

Какая связь между двумя таблицами? Кажется, это TechID, но вы ничего не указываете, что позволяет объединить две таблицы. Есть ли связь между квитанцией и наценкой? Должна ли квитанция иметь наценку?

JacalarRick 23.06.2019 19:36

TechID действительно имеет связь между двумя таблицами, а также датами, которые ищутся в таблицах/полях Receipts.Date и Materials_Receipts_Markup.DateOfReceipt.

Micha 23.06.2019 19:43

Я думаю, что запрос почти правильный. Вам нужно только изменить запрос «ГДЕ» только один раз вместо двух. И в последнем предложении вы можете изменить TechID ='$FormTechID' на Receipts.TechID ='$FormTechID', чтобы предотвратить неоднозначный выбор столбца TechID.

Hasta Dhana 23.06.2019 19:46

techID нужно искать в обеих таблицах Receipts.TechID и Materials_Receipts_Markup.TechID, и я пытаюсь вытащить только записи с определенных дат из обеих таблиц. Разве это не нужно WHERE как для Materials_Receipts_Markup.DateOfReceipt, так и для Receipts.Date таблиц/полей?

Micha 23.06.2019 19:48

Затем добавьте еще одно предложение, например AND Materials_Receipts_Markup.TechID=Receipts.TechID

Hasta Dhana 23.06.2019 19:51

Похоже, что, за исключением того, что данные были введены под одним и тем же TechID и в одном и том же диапазоне дат, между двумя таблицами нет логической связи. Если вы пытаетесь получить все записи по TechID за заданный период из двух независимых таблиц, вам нужно создать UNION.

JacalarRick 24.06.2019 00:50

@JacalarRick это ИМЕННО то, что я пытаюсь сделать

Micha 24.06.2019 18:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
7
90
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я думаю, вы хотите использовать OR для поиска каждой отдельной таблицы и получить оба TechID с помощью оператора =, например:

WHERE 
(
    (Receipts.Date BETWEEN '$newStartDate' AND '$newEndDate') 
    OR
    (Materials_Receipts_Markup.DateOfReceipt BETWEEN '$newStartDate' AND '$newEndDate') 
)
AND Receipts.TechID = Materials_Receipts_Markup.TechID AND Receipts.TechID ='$FormTechID'

Использование ИЛИ не дало бы мне результатов из обеих таблиц

Micha 23.06.2019 21:59

Он также возвращает ошибку Error: Unknown table 'Receipts' in field list

Micha 23.06.2019 22:10

Как написать окончательный запрос?

Hasta Dhana 24.06.2019 09:36

Я только что сделал 2 отдельных запроса, так как больше ничего не мог заставить работать.

Micha 24.06.2019 18:46

Если между двумя таблицами нет другого связующего поля, между ними, по-видимому, нет никакой логической связи, за исключением того, что данные вводятся одним и тем же TechID. Вместо JOIN вам может понадобиться UNION.

  select r.techid as tech, r.date as date, r.totalprice as price, r.totalprofit as profit, null as markup  
    from receipts r 
    where r.TechID = 'FormTechID' and r.date between '$newStartDate' AND '$newEndDate'

  UNION

  select mrm.TechID as tech, mrm.DateOfReceipt as date, null as price, null as profit,   mrm.markup as markup
    from Materials_Receipts_Markup mrm
    where mrm.TechID = '$FormTechID' and mrm.DateOfReceipt between '$newStartDate' AND '$newEndDate'

Если есть какое-то другое поле (например, ReceiptID), вам нужно объединить свои таблицы в нем.

Другие вопросы по теме