0 / 0 / 1
Регистрация: 26.07.2013
Сообщений: 49
1

как сделать так чтоб было видно всех klient в том числе у которых нет zakaz

17.08.2013, 13:43. Показов 2148. Ответов 24
Метки нет (Все метки)

Есть вот такой запрос.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
  klient.tel,
  klient.familiya,
  klient.imy,
  klient.otchestvo,
  klient.smsras,
  klient.smsstat,
  SUM(stroka_zakaza.kol * price.price) AS summa1,
  klient.idklient
FROM klient
  INNER JOIN zakaz
    ON klient.idklient = zakaz.idklient
  INNER JOIN stroka_zakaza
    ON zakaz.idzakaz = stroka_zakaza.idzakaz
  INNER JOIN price
    ON stroka_zakaza.idprice = price.idprice
GROUP BY klient.idklient
Данный запрос показывает все klient у которых есть zakaz.

А как сделать так чтоб было видно всех klient в том числе у которых нет zakaz
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.08.2013, 13:43
Ответы с готовыми решениями:

Как сделать чтоб было видно переменную?
Вопрос в следующем, как сделать чтоб видно было переменную arr?? Если я распечатываю её сразу, то...

Как сделать чтоб при запуске дочерней форма компоненты с Form1 не мешались, и не было видно на Form2?
Как сделать чтоб при запуске дочерней форма компоненты с Form1 не мешались, и не было видно на...

Как сделать так чтобы программу не было видно на панели задач
Как сделать так чтоы программу небыло видно на панели задач (нижняя панель)?

Как сделать так, чтобы при запуске программы её не было видно?
Как сделать так, чтобы при запуске программы её не было видно? А именно программа запущена а...

24
1312 / 944 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
17.08.2013, 14:30 2
Заменить везде INNER на LEFT
1
0 / 0 / 1
Регистрация: 26.07.2013
Сообщений: 49
17.08.2013, 14:46  [ТС] 3
Цитата Сообщение от cygapb-007 Посмотреть сообщение
Заменить везде INNER на LEFT
Запрос не чего не делает кроме того как постоянно грузит и все.

Добавлено через 2 минуты
Цитата Сообщение от shurek2013 Посмотреть сообщение
Запрос не чего не делает кроме того как постоянно грузит и все.
Видима какой то сумасшедший цыкал.
0
600 / 467 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
17.08.2013, 16:07 4
LEFT JOIN вместо INNER ?
0
Заблокирован
17.08.2013, 17:09 5
Надо получить NULL, то есть таблицу с несвязанными полями. Тогда добавив в конец IS NULL вы получите тех клиентов, которые не связывались с заказами. Запрос в цитате не разбирал, но помню что inner возвращает только определенность, чтобы вернуть неопределенность нужен либо left, либо right или типа того join.
0
1312 / 944 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
17.08.2013, 19:14 6
Цитата Сообщение от shurek2013 Посмотреть сообщение
Запрос не чего не делает кроме того как постоянно грузит и все.
А ындексы то вналичьи?
1
Заблокирован
17.08.2013, 19:27 7
Осмотрел запрос. Чтобы найти всех кто заказывал вроде бы хватает

WHERE klient.idklient = zakaz.idklient

следовательно

SELECT klient.*
FROM klient LEFT JOIN zakaz ON
klient.idklient = zakaz.idklient
WHERE zakaz.idklinet IS NULL

должо и дать.
0
0 / 0 / 1
Регистрация: 26.07.2013
Сообщений: 49
18.08.2013, 08:47  [ТС] 8
Цитата Сообщение от sqlnub Посмотреть сообщение
Осмотрел запрос. Чтобы найти всех кто заказывал вроде бы хватает

WHERE klient.idklient = zakaz.idklient

следовательно

SELECT klient.*
FROM klient LEFT JOIN zakaz ON
klient.idklient = zakaz.idklient
WHERE zakaz.idklinet IS NULL

должо и дать.
Да только при этом надо сосчитать сколько они всего заказывали то что выводиться в summa1
0
0 / 0 / 1
Регистрация: 26.07.2013
Сообщений: 49
18.08.2013, 08:56  [ТС] 9
Цитата Сообщение от shurek2013 Посмотреть сообщение
Да только при этом надо сосчитать сколько они всего заказывали то что выводиться в summa1
К тому же тут где та ошибка
Миниатюры
как сделать так чтоб было видно всех klient в том числе у которых нет zakaz  
0
0 / 0 / 1
Регистрация: 26.07.2013
Сообщений: 49
18.08.2013, 09:01  [ТС] 10
Если делаю вот так то все нормально выполняется но по прежнему выводит только тех клиентов у которых есть заказы.

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
  klient.tel,
  klient.familiya,
  klient.imy,
  klient.otchestvo,
  klient.smsras,
  klient.smsstat,
  SUM(stroka_zakaza.kol * price.price) AS summa1,
  klient.idklient
FROM klient
  LEFT OUTER JOIN zakaz
    ON klient.idklient = zakaz.idklient
  LEFT OUTER JOIN stroka_zakaza
    ON zakaz.idzakaz = stroka_zakaza.idzakaz
  INNER JOIN price
    ON stroka_zakaza.idprice = price.idprice
GROUP BY klient.idklient
Как только вот у это меняю

MySQL
1
2
 INNER JOIN price
    ON stroka_zakaza.idprice = price.idprice
на

MySQL
1
2
LEFT OUTER JOIN price
    ON stroka_zakaza.idprice = price.idprice
все запрос начинает выполняться без конечно.
0
0 / 0 / 1
Регистрация: 26.07.2013
Сообщений: 49
18.08.2013, 09:37  [ТС] 11
Цитата Сообщение от NEbO Посмотреть сообщение
LEFT JOIN вместо INNER ?
Не помогает пробы вал уже.
0
magirus
18.08.2013, 09:43
  #12

Не по теме:

Цитата Сообщение от shurek2013 Посмотреть сообщение
не до перает, пробы вал
может для начала озаботиться изучением русского?
уж извиняйте... троллем побуду...

0
0 / 0 / 1
Регистрация: 26.07.2013
Сообщений: 49
18.08.2013, 09:48  [ТС] 13
Короче я уже начинаю медленно думать что там не надо выводить сумму заказов. )))) И переубеждаю в этом начальство. Тогда встает задача надо хотя бы посчитать сколько всего заказов у этого клиента.

Добавлено через 1 минуту
Цитата Сообщение от magirus Посмотреть сообщение

Не по теме:


может для начала озаботиться изучением русского?
уж извиняйте... троллем побуду...

Тут не форум русского языка. ))) Логично?
0
1312 / 944 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
18.08.2013, 09:49 14
Еще раз спрошу: все необходимые для быстрой обработки запроса индексы – построены?
1
0 / 0 / 1
Регистрация: 26.07.2013
Сообщений: 49
18.08.2013, 09:54  [ТС] 15
Цитата Сообщение от cygapb-007 Посмотреть сообщение
Еще раз спрошу: все необходимые для быстрой обработки запроса индексы – построены?
Да.

Таблица клиенты

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE klient (
  idklient int(11) NOT NULL AUTO_INCREMENT COMMENT 'ИД Клиента',
  tel varchar(11) NOT NULL COMMENT 'Телефон клиента в формате 79058067908 ',
  familiya varchar(45) DEFAULT NULL COMMENT 'Фамилия клиента',
  imy varchar(45) DEFAULT NULL COMMENT 'Имя клиента',
  otchestvo varchar(45) DEFAULT NULL COMMENT 'Отчество клиента',
  smsras varchar(3) DEFAULT 'Нет' COMMENT 'согласен ли клиент получать смс рассылку',
  smsstat varchar(3) NOT NULL DEFAULT 'Нет' COMMENT 'согласен ли клиент получать смс по готовности',
  PRIMARY KEY (idklient)
)
ENGINE = MYISAM
AUTO_INCREMENT = 4733
AVG_ROW_LENGTH = 54
CHARACTER SET cp1251
COLLATE cp1251_general_ci
COMMENT = 'Клиенты';
0
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
28037 / 15768 / 981
Регистрация: 15.09.2009
Сообщений: 67,753
Записей в блоге: 78
18.08.2013, 09:55 16
нелогично.
4.3
4.8
5.2
5.4
5.5

пункты правил форума которые Вы нарушили уже. Достаточно?
0
1312 / 944 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
18.08.2013, 10:00 17
Стройте запрос ступенчато: left join на 2 таблицы, если скорость приемлема, подключайте следующую, если нет – разбирайте причины тормозов по плану выполнения запроса.

Добавлено через 1 минуту
Ээ.. Для таблицы клиентов индекс (в этом запросе) не требуется, на нее не наложено никаких ограничений
1
0 / 0 / 1
Регистрация: 26.07.2013
Сообщений: 49
18.08.2013, 10:05  [ТС] 18
Цитата Сообщение от cygapb-007 Посмотреть сообщение
Еще раз спрошу: все необходимые для быстрой обработки запроса индексы – построены?
Да.

Таблица клиенты

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE klient (
  idklient int(11) NOT NULL AUTO_INCREMENT COMMENT 'ИД Клиента',
  tel varchar(11) NOT NULL COMMENT 'Телефон клиента в формате 79058067908 ',
  familiya varchar(45) DEFAULT NULL COMMENT 'Фамилия клиента',
  imy varchar(45) DEFAULT NULL COMMENT 'Имя клиента',
  otchestvo varchar(45) DEFAULT NULL COMMENT 'Отчество клиента',
  smsras varchar(3) DEFAULT 'Нет' COMMENT 'согласен ли клиент получать смс рассылку',
  smsstat varchar(3) NOT NULL DEFAULT 'Нет' COMMENT 'согласен ли клиент получать смс по готовности',
  PRIMARY KEY (idklient)
)
ENGINE = MYISAM
AUTO_INCREMENT = 4733
AVG_ROW_LENGTH = 54
CHARACTER SET cp1251
COLLATE cp1251_general_ci
COMMENT = 'Клиенты';
Таблица заказ

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
CREATE TABLE u22343_foto.zakaz (
  idzakaz bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Номер заказа',
  datazakaza date DEFAULT NULL COMMENT 'Дата заказа',
  datavprint date DEFAULT NULL COMMENT 'Плановая дата в печать',
  datagot date DEFAULT NULL COMMENT 'Дата плановой готовности',
  datavyd date DEFAULT NULL COMMENT 'Дата выдачи',
  idstatus_zakaz int(11) NOT NULL COMMENT 'ИД статуса заказа',
  idklient int(11) NOT NULL COMMENT 'ИД клиента',
  idsotr_prinyl int(11) NOT NULL COMMENT 'Кто принял заказ',
  idsotr_print int(11) NOT NULL COMMENT 'Кто напечатал заказ',
  idsotr_vydal int(11) NOT NULL COMMENT 'Кто выдал заказ',
  summma_zakaz decimal(15, 2) DEFAULT NULL COMMENT 'Сумма заказа',
  idmagaz int(11) NOT NULL COMMENT 'Точка приема заказа',
  polya varchar(15) NOT NULL COMMENT 'с полями или без',
  koment text NOT NULL COMMENT 'Коментарии заказа при оформлении',
  sec varchar(255) NOT NULL COMMENT 'секретный код заказа для проверки через инет',
  idtypeoplat int(11) NOT NULL COMMENT 'тип оплаты',
  idprint int(11) NOT NULL COMMENT 'на каком принтера был отпечатан',
  datapost date NOT NULL COMMENT 'дата и время постановки в печать',
  idsotr_post int(11) NOT NULL COMMENT 'кто поставил его в печать',
  komsotr text NOT NULL COMMENT 'Коментарии сотрудника которые клиент не видет в личном кабинете на сайте',
  inet tinyint(1) NOT NULL COMMENT 'интернет заказ или нет',
  site varchar(255) NOT NULL COMMENT 'если интернет то с какого сайти',
  PRIMARY KEY (idzakaz)
)
ENGINE = MYISAM
AUTO_INCREMENT = 15239
AVG_ROW_LENGTH = 93
CHARACTER SET cp1251
COLLATE cp1251_general_ci
COMMENT = 'Заказы';
Строка заказа

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE u22343_foto.stroka_zakaza (
  idstroka_zakaza int(30) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Ид строки заказа',
  idprice int(11) NOT NULL COMMENT 'ид из прайса',
  kol decimal(10, 0) DEFAULT NULL COMMENT 'Количество',
  summma decimal(15, 2) DEFAULT NULL COMMENT 'Сумма',
  idzakaz int(11) NOT NULL COMMENT 'К какому заказу относиться строка',
  PRIMARY KEY (idstroka_zakaza)
)
ENGINE = MYISAM
AUTO_INCREMENT = 8586
AVG_ROW_LENGTH = 25
CHARACTER SET cp1251
COLLATE cp1251_general_ci
COMMENT = 'Строка к заказам';
Прайс
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE TABLE u22343_foto.price (
  idprice int(11) NOT NULL AUTO_INCREMENT,
  name varchar(100) DEFAULT NULL COMMENT 'Наименование',
  price decimal(10, 2) DEFAULT NULL COMMENT 'Цена',
  delet int(11) NOT NULL COMMENT 'Удалена ли позиция',
  prinyl decimal(10, 2) NOT NULL COMMENT 'Сколько получает сотрудника за прием',
  print decimal(10, 2) NOT NULL COMMENT 'Сколько получает сотрудник за печать',
  inet tinyint(1) NOT NULL COMMENT 'Интернет позиция если 1 то да',
  format varchar(255) NOT NULL COMMENT 'Формат ',
  sert int(11) NOT NULL COMMENT 'Является ли сертификатом',
  kol int(11) NOT NULL COMMENT 'Количество для верного подсчета',
  PRIMARY KEY (idprice)
)
ENGINE = MYISAM
AUTO_INCREMENT = 101
AVG_ROW_LENGTH = 73
CHARACTER SET cp1251
COLLATE cp1251_general_ci
COMMENT = 'позиции';
Добавлено через 1 минуту
Цитата Сообщение от cygapb-007 Посмотреть сообщение
Стройте запрос ступенчато: left join на 2 таблицы, если скорость приемлема, подключайте следующую, если нет – разбирайте причины тормозов по плану выполнения запроса.

Добавлено через 1 минуту
Ээ.. Для таблицы клиентов индекс (в этом запросе) не требуется, на нее не наложено никаких ограничений
Не она там нужна только для других целей )))

Добавлено через 1 минуту
Вот как то так выглядят эти таблицы.

Добавлено через 25 секунд
Цитата Сообщение от magirus Посмотреть сообщение
нелогично.
4.3
4.8
5.2
5.4
5.5

пункты правил форума которые Вы нарушили уже. Достаточно?
да.
0
1312 / 944 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
18.08.2013, 10:07 19
Ну и где, например, в заказах необходимый индекс по клиенту?

Очнитесь, вы ищете не по коду заказа, а по коду клиента, индекса нет – отсюда полный скан таблицы заказов.

То же с остальными таблицами.
1
0 / 0 / 1
Регистрация: 26.07.2013
Сообщений: 49
18.08.2013, 10:15  [ТС] 20
Цитата Сообщение от cygapb-007 Посмотреть сообщение
Ну и где, например, в заказах необходимый индекс по клиенту?

Очнитесь, вы ищете не по коду заказа, а по коду клиента, индекса нет – отсюда полный скан таблицы заказов.

То же с остальными таблицами.
То есть везде где есть id нужно тупо сделать все это индексом?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2013, 10:15
Помогаю со студенческими работами здесь

Как сделать так чтобы было видно что подставляться в уравнения
Я хочу чтобы через равно програма подставляла числа, а через следующие результат, тоесть как бы в...

Как сделать так чтоб не было в начале ни 0 ни пробела
Дан текстовый файл (он у меня input.txt), который содержит действительные числа (кол-во чисел не...

Как сохранять в базу данных числа, у которых бесконечный остаток так, чтобы не было видно бесконечного остатка?
Я уже несколько раз поднимал этот вопрос на форуме, но тогда он косался вывода в Label. Теперь мне...

Как сделать окно поверх всех, в том числе и панели задач?
Есть окно, которому я задал стили, чтобы оно было поверх всех окон (TOPMOST). Так-то оно поверх...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru