Биллинговая система Nodeny
29 Сентября 2024, 05:25:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Запрос на выборку полей из users и dopvalues  (Прочитано 5324 раз)
Elisium
NoDeny
Старожил
*

Карма: 19
Offline Offline

Сообщений: 360


На форумах "спасибом" называется плюс к карме.


Просмотр профиля
« : 22 Ноября 2011, 23:36:52 »

Люди хелп )
Споткнулся под вечер об вроде бы несложную вещь:

Задача:
Необходимо выбрать пользователей из БД, у кого ип адреса находятся в диапазоне, допустим, like %192.168.16.% И У КОТОРЫХ присутствует ип адрес ПОСЛЕДНЕЙ РЕВИЗИИ в поле dopvalues.field_value с номером доп. поля dopvalues.dopfield_id = 6

Запрос на выборку значения из dopvalues с конкретным parent_id такой:
Код:
SELECT parent_id, field_value
FROM `dopvalues`
WHERE `dopfield_id` =6
AND `revision` = (
SELECT MAX( `revision` )
FROM `dopvalues`
WHERE `dopfield_id` =6
AND `parent_id`=ХХХ)
Выборка юзеров из диапазона вот:
Код:
SELECT id FROM `users` WHERE ip LIKE '%192.168.16.%'

КАК их обьединить, что бы на выходе получались ид юзеров с АКТУАЛЬНЫМИ field_value ??

Ломаю голову уже второй час, голова не железная же )
Хелп)
Записан
VitalVas
NoDeny
Спец
*

Карма: 60
Offline Offline

Сообщений: 991



Просмотр профиля WWW
« Ответ #1 : 23 Ноября 2011, 02:41:13 »

left join?
Записан
Elisium
NoDeny
Старожил
*

Карма: 19
Offline Offline

Сообщений: 360


На форумах "спасибом" называется плюс к карме.


Просмотр профиля
« Ответ #2 : 23 Ноября 2011, 21:46:53 »

Пробовал я его ))
Вот только не могу понять, как ид юзера правильно подставить из одного запроса во второй (то есть проверка dopvalues.parent_id=users.id)
Лефтджоинить нужно по ид (имхо), но вот только сначала нужно его же и подставить в запрос из допвалюес.
В общем, как это сделать без Перла, не догнал ...
На нем то просто. А вот однозапросный мускуль как ?

Ктото может подсказать ?
п.с. Я знаю, могут ) Пните нужным примером.
Стопудово ктото такое одним запросом делал уже.
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #3 : 23 Ноября 2011, 23:44:58 »

Ну, для начала прочитать маны )))
Код:
SELECT tbl1.* FROM tbl1 LEFT JOIN tbl2 ON tbl1.column=tbl2.column WHERE ...
Что-то типа этого. В ON можно юзать AND но не рекомендуется исп. ON для фильтра результатов, для этого есть WHERE
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4787



Просмотр профиля
« Ответ #4 : 30 Ноября 2011, 00:22:55 »

Код:
SELECT d.parent_id, v.field_value FROM
        (SELECT id FROM users WHERE ip LIKE '192.168.16.%') u
        LEFT JOIN (SELECT MAX(revision) AS rev,parent_id FROM dopvalues WHERE dopfield_id = 6 GROUP BY parent_id) d ON u.id = d.parent_id
        LEFT JOIN (SELECT revision,field_value FROM dopvalues ) v ON d.rev = v.revision
        WHERE v.field_value IS NOT NULL
Записан
Elisium
NoDeny
Старожил
*

Карма: 19
Offline Offline

Сообщений: 360


На форумах "спасибом" называется плюс к карме.


Просмотр профиля
« Ответ #5 : 30 Ноября 2011, 23:12:01 »

ЕПРСТ товарисчи!!!
Этож на элементарную (по сути то) задачу пятиэтажный запрос нужно делать!!!
омг!!
Спасибо большое за ответ ...

п.с. ОЧЕНЬ НАДЕЮСЬ, что в новой версии биллинга не будет такого мозго*бства, уж извините за выражение ....(((((

п.п.с.
Не выводит этот запрос все равно то, что хотелось:
Цитировать
parent_id    field_value
128   
128   00:1f:1f:99:45:38
128   513
128   0
128   0
128   13
128   0
И таких строк около 2х тысяч.
Записан
Elisium
NoDeny
Старожил
*

Карма: 19
Offline Offline

Сообщений: 360


На форумах "спасибом" называется плюс к карме.


Просмотр профиля
« Ответ #6 : 30 Ноября 2011, 23:37:58 »

Исправил запрос вот так:
Код:
SELECT d.parent_id, v.field_value
FROM (
SELECT id
FROM users
WHERE ip LIKE '192.168.16.%'
) u

LEFT JOIN (
SELECT MAX( revision ) AS rev, parent_id
FROM dopvalues
WHERE dopfield_id =6
GROUP BY parent_id
) d
ON u.id = d.parent_id

LEFT JOIN (
SELECT revision, field_value
FROM dopvalues
WHERE dopfield_id =6
)v
ON d.rev = v.revision
WHERE v.field_value != ""
Теперь поехало...
Спс за пинок в нужном направлении )
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4787



Просмотр профиля
« Ответ #7 : 01 Декабря 2011, 01:03:00 »

п.с. ОЧЕНЬ НАДЕЮСЬ, что в новой версии биллинга не будет такого мозго*бства, уж извините за выражение ....(((((


начиная с 49.33 в дополнительных данных нет ревизии (они в другой таблице), поэтому запросы гораздо проще там будут.
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!