Intereting Posts

Обработка ошибок в следующем SQL-запросе

Скрипты со столами здесь

Я использую следующий sql с таблицами в скрипте, чтобы проверить, достиг ли пользователь предела заимствования. Проблема в том, что если был указан недопустимый номер элемента, он возвращает NULL, если пользователь не заимствовал какие-либо предметы, он возвращает NULL. Таким образом, я не могу сказать, был ли указан недопустимый номер товара или если пользователь фактически не заимствовал какие-либо книги. Что было бы хорошим способом проверить, был ли указан недопустимый номер товара, или какой-либо член фактически ничего не занимал в этой категории?

set @mId = 3 //Has not borrowed anything till now. set @id = 21; //This item does not appear in the collection_db table and is therefore invalid. set @country = 'US'; SELECT col1.id, col1.holder, col2.borrowMax maxLimit, count(lend.borrowedId) as `count` FROM collection_db col1 INNER JOIN collection_db col2 ON col1.holder = col2.id INNER JOIN lendings lend ON col1.holder = lend.holder and col1.country = lend.country WHERE col1.id = @id and col1.country = @country AND col2.category = 10 AND lend.memId = @mId and lend.country = @country 

Самое дальнее, что я мог получить с одним запросом (должен был вынуть php и «country» vars для скрипки для работы):

 SELECT col1.id, col1.holder, col2.borrowMax maxLimit, count(lend.borrowedId) as `count` ,case when valid1.id is not null then 'true' else 'false' end as validId FROM collection_db col1 INNER JOIN collection_db col2 ON col1.holder = col2.id INNER JOIN lendings lend ON col1.holder = lend.holder,( Select Distinct a.id From collection_db a Where a.id = 4) valid1 WHERE col1.id = 4 AND col2.category = 10 AND lend.memId = 1 

Возможно, вам придется выполнить предварительный запрос на проверку действительного memId:

 $theQuery = "SELECT DISTINCT memId FROM lendings WHERE memId = 1" 

Затем проверьте его здесь:

 if (mysql_num_rows(mysql_query($theQuery)) <= 0) { /* No memId exists */ } else { /* Do big query here */ } 

Вы можете использовать tableA LEFT JOIN tableB , которая вернет результаты для таблицы A, даже если tableB не имеет совпадений и вернет значения NULL для тех, что указаны в таблицеB.

К сожалению, я не могу понять, где вам нужны ЛЕВОЕ СОЕДИНЕНИЕ, но, вероятно, вы хотите их в обоих местах.

Вам также может потребоваться изменить порядок таблиц, если это первая таблица, которая должна находиться справа от LEFT JOIN. Вы можете использовать ПРАВОЕ СОЕДИНЕНИЕ, но для меня это менее понятно.

возможно, вы должны попробовать «левое соединение», если col1 не имеет слишком большого количества данных или выполняет шаг за шагом