Перейти к содержимому



  • Закрытая тема Тема закрыта

Не работает сложный SQL Запрос

#1 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0
0

Отправлено 16 Ноябрь 2010 - 20:03

SELECT COUNT(a.id) FROM chu_logs AS a LEFT JOIN chu_users AS b ON (a.uid=b.id) 
WHERE 1=1
AND ( a.`type` LIKE 'carbaseedit_upload_csv' AND a.`type` LIKE 'carbase_search_carnum' AND 1=1)
AND (1=1 AND a.`uid`=58 AND a.`uid`=57 AND a.`uid`=53 AND a.`uid`=52)
AND ( b.`company`=11 AND b.`company`=13 AND 1=1)
AND (a.`date` BETWEEN 0 AND 2177280000)


Вторая таблица используется для поиска по компании, так как в первой она не указана.
В первой указан пользователь, для которого указана компания во второй таблице.

Если В скобках AND больше одного, то вытаскивает 0.

В чем моя ошибка?
Заранее спасибо.

 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Как сделать sql запрос
  2. Сложный запрос
  3. Помогите разобрать запрос SQL
  4. PHP + сложный запрос в PostgeSQL
  5. Проблема с SQL запросами?

#2 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 16 Ноябрь 2010 - 23:12

Все исправилось тем, что вместо AND в скобках выставил OR. Вот и вся математика. =)
  • 0

#3 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 17 Ноябрь 2010 - 22:43

gaaarfild,
Взглянув на
b.`company`=11 AND b.`company`=13'
сразу становится понятно в чем ошибка. Не может одно и тоже поле в одной и тойже записи иметь сразу два значения.
И объясни мне, зачем тебе условие 1=1? Это же эквивалент без условия.
  • 0

#4 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 18 Ноябрь 2010 - 03:41

Это потому, что у меня запрос генерируется и в конце, после OR нужна заглушка. Ну или вначале перед. =)
  • 0

#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 18 Ноябрь 2010 - 10:34

gaaarfild, никак не пойму, что даёт тебе эта заглушка. Она всегда будет TRUE.
  • 0

#6 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 18 Ноябрь 2010 - 10:41

Да. =)
Ну когда ты генерируешь условие циклом, тебе надо написать например так
foreach($usl AS $value){
$where .= " product=".$value." OR ";
}

Когда у тебя закончится цикл, то условие у тебя будет заканчиваться на OR, а его же надо как-то закрыть, чтобы SQL запрос был корректен. В таком случае использую такую заглушку. Вот и все.
  • 0

#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 18 Ноябрь 2010 - 11:00

gaaarfild, а кто тебе мешает делать с помощью implode :) ну или подобных ухищрений.
Можно этот OR вычищать в конце, или же проверять на последний элемент, если последний элемент в цикле, то OR не ставим
  • 0

#8 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 18 Ноябрь 2010 - 17:40

А так не проще? =)
  • 0

#9 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 19 Ноябрь 2010 - 00:42

gaaarfild, ХЗ, кому как :)
  • 0

#10 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 19 Ноябрь 2010 - 03:11

Мне просто проще написать в конце 1=1 чем создавать Implode функцию или записывать функцию обрезки. =)
Чисто логически! =)
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru