Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.03.2011, 00:32
gebs gebs вне форума
Прохожий
 
Регистрация: 03.08.2010
Сообщения: 48
Репутация: 10
По умолчанию Этот странный SQL, 2 запроса - разный результат

Здравствуйте! Есть база данных, есть запрос на SELECT, он повешен на MyQuery, соотвественно отрабатывает при старте программы:

Код:
SELECT users.id AS uid, users.login, users.password, users.basic_account, FROM_UNIXTIME( users.create_date ) AS ucd , FROM_UNIXTIME( users.last_change_date ) AS ulcd,  accounts.is_blocked, users.full_name, accounts.balance, accounts.credit, inet_ntoa( ip_groups.ip & 0xffffffff ) AS ip_adress, ip_groups.mac AS mac, users.actual_address, users.work_telephone, users.home_telephone, users.mobile_telephone, users.icq_number, users.house_id, users.flat_number, users.entrance, users.floor, users.district, users.remote_switch_id, users.port_number, users.is_deleted, service_links.service_id  
FROM users
INNER JOIN accounts ON accounts.id = users.basic_account
INNER JOIN service_links ON service_links.account_id = users.basic_account
INNER JOIN iptraffic_service_links ON iptraffic_service_links.id = service_links.id
INNER JOIN ip_groups ON ip_groups.ip_group_id = iptraffic_service_links.ip_group_id
WHERE users.is_deleted =0
AND accounts.is_deleted =0
AND iptraffic_service_links.is_deleted =0
AND ip_groups.is_deleted =0
GROUP BY users.id DESC

Результат выполнения: 1576


После есть кнопка "обновить" на неё повешена процедура:

Код:
procedure Tfm_main.ToolButton11Click(Sender: TObject);
begin
  with MyQ do begin
         Close;
         SQL.Clear;
         SQL.Add('SELECT users.id AS uid, users.login, users.password, users.basic_account, FROM_UNIXTIME( users.create_date ) AS ucd , '+
         'FROM_UNIXTIME( users.last_change_date ) AS ulcd,  accounts.is_blocked, users.full_name, accounts.balance, accounts.credit, '+
         'inet_ntoa( ip_groups.ip & 0xffffffff ) AS ip_adress, ip_groups.mac AS mac, users.actual_address, users.work_telephone, users.home_telephone, '+
         ' users.mobile_telephone, users.icq_number, users.house_id, users.flat_number, users.entrance, users.floor, users.district, users.remote_switch_id, '+
         ' users.port_number, users.is_deleted, service_links.service_id');
         SQL.Add('FROM users');
         SQL.Add('INNER JOIN accounts ON accounts.id = users.basic_account');
         SQL.Add('INNER JOIN service_links ON service_links.account_id = users.basic_account');
         SQL.Add('INNER JOIN iptraffic_service_links ON iptraffic_service_links.id = service_links.id');
         SQL.Add('INNER JOIN ip_groups ON ip_groups.ip_group_id = iptraffic_service_links.ip_group_id');
         SQL.Add('WHERE users.is_deleted =0');
         SQL.Add('AND accounts.is_deleted =0');
         SQL.Add('AND iptraffic_service_links.is_deleted =0');
         SQL.Add('AND ip_groups.is_deleted =0');
         SQL.Add('ORDER BY users.id DESC');
         Open;
       end;
end;

Результат выполнения: 1633

Вопрос почему разные значения.
Кстати при первом запросе дебликаты не показывается, но установка поля DbGrid в HideDuplicates:=true; - не помогает.
Ответить с цитированием
  #2  
Старый 07.03.2011, 00:43
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

а в Delphi как количество строк получаете?
Ответить с цитированием
  #3  
Старый 07.03.2011, 00:46
gebs gebs вне форума
Прохожий
 
Регистрация: 03.08.2010
Сообщения: 48
Репутация: 10
По умолчанию

Цитата:
Сообщение от Assistant
а в Delphi как количество строк получаете?
Из DataSource, но в гриде тоже появляются новые записи.
Ответить с цитированием
  #4  
Старый 07.03.2011, 00:49
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

так прям ничего сказать не могу без самой базы (если есть желание прикрепи dump базы, сейчас посмотрю, если желания нет - жди пока кто нибудь ответит, я без dump'а сказать не могу, я практик, а не теоретик )

Чукча — не читатель, Чукча — писатель ))
Ответить с цитированием
  #5  
Старый 07.03.2011, 00:51
gebs gebs вне форума
Прохожий
 
Регистрация: 03.08.2010
Сообщения: 48
Репутация: 10
По умолчанию

Цитата:
Сообщение от Assistant
так прям ничего сказать не могу без самой базы (если есть желание прикрепи dump базы, сейчас посмотрю, если желания нет - жди пока кто нибудь ответит, я без dump'а сказать не могу, я практик, а не теоретик )
=) база 15 ГБ
Ответить с цитированием
  #6  
Старый 07.03.2011, 00:53
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

от же жесть....как же быть....ну кусок базы давай с теми таблицами что в join'е. и кстати, попробуй юзать ZEOSDBO
Ответить с цитированием
  #7  
Старый 07.03.2011, 01:20
gebs gebs вне форума
Прохожий
 
Регистрация: 03.08.2010
Сообщения: 48
Репутация: 10
По умолчанию

Цитата:
Сообщение от Assistant
от же жесть....как же быть....ну кусок базы давай с теми таблицами что в join'е. и кстати, попробуй юзать ZEOSDBO
Увы, базу дать не могу, конфидициально.
Ответить с цитированием
  #8  
Старый 07.03.2011, 01:26
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

ну тады zeosdbo попробуй заюзать, сколько лет с ним работаю - не разу проблем не было
Ответить с цитированием
  #9  
Старый 07.03.2011, 07:42
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Assistant
ну тады zeosdbo попробуй заюзать, сколько лет с ним работаю - не разу проблем не было

Да тут явно проблема в другом. Тебе точно INNER JOIN нужен? Может все-таки LEFT JOIN?
Ответить с цитированием
  #10  
Старый 07.03.2011, 12:32
Kapitoshka438 Kapitoshka438 вне форума
Начинающий
 
Регистрация: 09.11.2009
Сообщения: 145
Репутация: 238
По умолчанию

Это у тебя в первом запросе с GROUP BY опечатка чтоли?
Ответить с цитированием
  #11  
Старый 07.03.2011, 14:15
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Так а чего же вы хотели, конечно разные результаты. В первом запросе используется группировка и сортировка результатов, а во втором только сортировка.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #12  
Старый 07.03.2011, 15:10
gebs gebs вне форума
Прохожий
 
Регистрация: 03.08.2010
Сообщения: 48
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Так а чего же вы хотели, конечно разные результаты. В первом запросе используется группировка и сортировка результатов, а во втором только сортировка.

Спасибо большое, просто подсел на дельфи вчера 23 часа сидел, мозг высох.
Ответить с цитированием
  #13  
Старый 07.03.2011, 16:23
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

пипец x_O, сколько лет работаю с SQL, и не заметил разницу с ORDER и GROUP
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:18.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter