У меня есть 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 действительно имеет связь между двумя таблицами, а также датами, которые ищутся в таблицах/полях Receipts.Date и Materials_Receipts_Markup.DateOfReceipt.
Я думаю, что запрос почти правильный. Вам нужно только изменить запрос «ГДЕ» только один раз вместо двух. И в последнем предложении вы можете изменить TechID ='$FormTechID' на Receipts.TechID ='$FormTechID', чтобы предотвратить неоднозначный выбор столбца TechID.
techID нужно искать в обеих таблицах Receipts.TechID и Materials_Receipts_Markup.TechID, и я пытаюсь вытащить только записи с определенных дат из обеих таблиц. Разве это не нужно WHERE как для Materials_Receipts_Markup.DateOfReceipt, так и для Receipts.Date таблиц/полей?
Затем добавьте еще одно предложение, например AND Materials_Receipts_Markup.TechID=Receipts.TechID
Похоже, что, за исключением того, что данные были введены под одним и тем же TechID и в одном и том же диапазоне дат, между двумя таблицами нет логической связи. Если вы пытаетесь получить все записи по TechID за заданный период из двух независимых таблиц, вам нужно создать UNION.
@JacalarRick это ИМЕННО то, что я пытаюсь сделать






Я думаю, вы хотите использовать 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'
Использование ИЛИ не дало бы мне результатов из обеих таблиц
Он также возвращает ошибку Error: Unknown table 'Receipts' in field list
Как написать окончательный запрос?
Я только что сделал 2 отдельных запроса, так как больше ничего не мог заставить работать.
Если между двумя таблицами нет другого связующего поля, между ними, по-видимому, нет никакой логической связи, за исключением того, что данные вводятся одним и тем же 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), вам нужно объединить свои таблицы в нем.
Какая связь между двумя таблицами? Кажется, это TechID, но вы ничего не указываете, что позволяет объединить две таблицы. Есть ли связь между квитанцией и наценкой? Должна ли квитанция иметь наценку?