Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) 1 [2]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Запрос на поиск, не совсем простой
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3378
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 14 дней
Карма: 170




maximka787
Не сцы. Наши десктопщики, к тулзе которых мы пишем веб-морду, вообще в базе имеют таблицу, которая хранит первичные ключи к остальным таблицам.
И чтобы куда-то добавить запись, нужно сначала в этой "таблице первичных ключей" обновить запись, потом ее прочитать, а потом в нужную таблицу внести этот "первичный ключ".

А переписать возможности нет, т.к. более 200 клиентов, у каждого своя база, и это уж лет как 10.
Там на рефакторинг уйдет столько времени, что проще новую фирму открыть smile.gif


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5497
Пользователь №: 35718
На форуме: 4 года, 21 день
Карма: 167




Цитата (AllesKlar @ 11.12.2015 - 17:56)
сначала в этой "таблице первичных ключей" обновить запись, потом ее прочитать, а потом в нужную таблицу внести этот "первичный ключ"

это вполне нормальная практика для формирования уникального ключа(аналог UUID()), вот только читать ничего не надо, ласт инсерт айди для этого есть.


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maximka787  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1228
Пользователь №: 2705
На форуме: 9 лет, 4 месяца, 3 дня
Карма: 1




Мужики, выручите. Таблицу переделали и я теперь другой запрос не напишу никак(((

Есть 3 таблицы. Счета, менеджеры и атрибуты счета (позиции в счете)

SELECT `schet`.`id`, `schet`.`summa`, `schet`.`date_create`, `managers`.`name` 
FROM `schet`, `managers`
WHERE `schet`.`manager_id` = `managers`.`id`
AND `schet`.`date_create` < NOW() - INTERVAL 6 MONTH

Показываем все счета давностью более 6 месяцев.

Казалось бы всё просто, но надо через LEFT JOIN добавить таблицу атрибуты счета и по ней провести поиск.

Таблица `schet_items` (id, schet_id, usluga_id)
schet_id связана с `schet`
usluga_id - номера услуг. INT.

Как сделать так, чтобы в этот запрос добавить условие WHERE `usluga_id` = 10. при этом не забываем, что у некоторых счетов вообще нет атрибутов.

Я делал, но фигня получается.

SELECT `schet`.`id`, `schet`.`summa`, `schet`.`date_create`, `managers`.`name`, `schet_items`.*
FROM `schet`, `managers`
WHERE `schet`.`manager_id` = `managers`.`id`
AND `schet`.`date_create` < NOW() - INTERVAL 6 MONTH
LEFT JOIN `schet_items` ON `schet_items`.`schet_id` = `schet`.`id`
AND `schet_items`.`usluga_id` = 10




--------------------
..Работает - не трогай!
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maximka787  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1228
Пользователь №: 2705
На форуме: 9 лет, 4 месяца, 3 дня
Карма: 1




SELECT `schet`.`id`, `schet`.`summa`, `schet`.`date_create`, `managers`.`name`
FROM `schet`, `managers`
WHERE `schet`.`manager_id` = `managers`.`id`
AND `schet`.`date_create` < NOW() - INTERVAL 6 MONTH
LEFT JOIN `schet_items` ON `schet_items`.`schet_id` = `schet`.`id`
AND `schet_items`.`usluga_id` = 10

Ну да, он пишет ошибку в синтаксисе. Грамматика походу хромает.

PS
`schet_items`.* убрал. тк не нужно. в SELECTе


--------------------
..Работает - не трогай!
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1358
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 12 дней
Карма: 77




Сделай два джойна.
SELECT 
s.`id`, s.`summa`, s.`date_create`,
m.`name`,
CONCAT('SELECT ',
(

SELECT
GROUP_CONCAT(COLUMN_NAME)
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE

TABLE_NAME='schet_items' AND
COLUMN_NAME NOT IN ('id')
ORDER BY
ORDINAL_POSITION
)
,
' FROM `schet_items`')
FROM
`schet` AS s
INNER JOIN
`managers` AS m ON m.`id` = s.`manager_id`
LEFT JOIN
`schet_items` AS i ON i.`schet_id` = s.`id` AND i.`usluga_id` = 10
WHERE
s.`date_create` < NOW() - INTERVAL 6 MONTH

	CONCAT('SELECT ',
(

SELECT
GROUP_CONCAT(COLUMN_NAME)
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE

TABLE_NAME='schet_items' AND
COLUMN_NAME NOT IN ('id')
ORDER BY
ORDINAL_POSITION
)
,
' FROM `schet_items`');

это конструкция равносильна записи i.* исключая id, а то у тебя будет не правильное значение номера счета.
edit
не моё, сделал по примеру из http://www.sql-ex.ru/help/select20.php?Lang=0

Это сообщение отредактировал Kusss - 16.12.2015 - 12:49
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1358
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 12 дней
Карма: 77




добавлю. Возможно вместо 'schet_items' нужно будет поставить алиас i
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) 1 [2]  Ответ в темуСоздание новой темыСоздание опроса