Как получить несколько записей против одной записи на основе отношения?

Обновление 20161110 - оригинальный ответ ниже

Также проверьте этот ответ для другого подхода.

Оригинальный ответ

на самом деле возможно.

Но не напрямую, способ сделать это - создать вторую ссылку на auth и использовать ее для создания пользователей:

var config = {apiKey: "apiKey",
    authDomain: "projectId.firebaseapp.com",
    databaseURL: "https://databaseName.firebaseio.com"};
var secondaryApp = firebase.initializeApp(config, "Secondary");

secondaryApp.auth().createUserWithEmailAndPassword(em, pwd).then(function(firebaseUser) {
    console.log("User " + firebaseUser.uid + " created successfully!");
    //I don't know if the next statement is necessary 
    secondaryApp.auth().signOut();
});

Если вы не укажете с которым связано использование Firebase для работы, он будет использовать первый по умолчанию.

Источник для нескольких ссылок на приложения.

EDIT

Для фактического создания нового пользователя не имеет значения, что никого нет, или кто-то другой, кроме администратора, не аутентифицирован на второй ссылке auth, потому что для создания всей учетной записи вам нужна сама ссылка auth.

Не тестировалось следующее, но об этом можно подумать.

То, что вам нужно подумать, - это записывать данные в firebase. Обычная практика заключается в том, что пользователи могут редактировать / обновлять свою собственную информацию о пользователе, поэтому, когда вы используете вторую ссылку на auth для написания, это должно работать. Но если у вас есть что-то вроде ролей или разрешений для этого пользователя, убедитесь, что вы пишете это с помощью ссылки auth, которая имеет права доступа. В этом случае главный auth - это admin, а второй auth - вновь созданный пользователь.

9
задан mdahlman 4 November 2013 в 04:39
поделиться

7 ответов

Так как вопрос отмечен как MySQL, необходимо смочь использовать определенное для MySQL решение, а именно, GROUP_CONCAT. Например,

select Org_ID, Org_Address, Org_OtherDetails,
       GROUP_CONCAT(employees) as Employees
from  employees a, organization b
where a.org_id=b.org_id
group by b.org_id;
3
ответ дан 4 December 2019 в 08:54
поделиться

Исходным вопросом была конкретная база данных, но возможно это - хорошее место для включения более универсального ответа. Это - общий вопрос. Понятие, которое Вы описываете, часто упоминается как 'Конкатенация Группы'. Нет никакого стандартного решения в SQL-92 или SQL-99. Таким образом, Вам будет нужно определенное для поставщика решение.

  • MySQL - Вероятно, простое решение. Используйте встроенную функцию GROUP_CONCAT. В Вашем примере Вы хотели бы что-то вроде этого:
select 
  o.ID, o.Address, o.OtherDetails,
  GROUP_CONCAT( concat(e.firstname, ' ', e.lastname) ) as Employees
from 
  employees e 
  inner join organization o on o.org_id=e.org_id
group by o.org_id
  • PostgreSQL - РЕДАКТИРОВАНИЕ: PostgreSQL 9.0 одинаково прост теперь, когда string_agg (выражение, разделитель) встроен. Здесь это с 'пространством запятой' между элементами:
select 
  o.ID, o.Address, o.OtherDetails,
  STRING_AGG( (e.firstname || ' ' || e.lastname), ', ' ) as Employees
from 
  employees e 
  inner join organization o on o.org_id=e.org_id
group by o.org_id

PostgreSQL прежде 9.0 позволяет, Вы для определения собственных агрегатных функций с СОЗДАЕТЕ АГРЕГАТ. Немного больше работы, чем MySQL, но намного более гибкий. Дополнительную информацию см. в этом другом сообщении. (Конечно, PostgreSQL 9.0 и позже имеет эту опцию также.)

  • Oracle & MS SQL Server - Создает хранимую процедуру, которая берет org_id в качестве его входа и производит связанные имена сотрудника. Затем используйте эту хранимую процедуру в своем запросе. Некоторые из других ответов здесь включают некоторые детали о том, как записать хранимые процедуры как они.
select 
  o.ID, o.Address, o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) as Employees
from 
  organization o
  • Другие технологии DBMS - маршрут хранимой процедуры наиболее вероятен. Возможно, другие могут обновить этот ответ с большим количеством технологии определенные ответы.
19
ответ дан 4 December 2019 в 08:54
поделиться

в MS SQL можно сделать:

create function dbo.table2list (@input int)
returns varchar(8000)
as
BEGIN
declare @putout varchar(8000)
set @putout = ''
select @putout = @putout + ', ' + <employeename>
from <employeetable>
where <orgid> = @input
return @putout
end

затем сделайте:

select * from org, dbo.table2list(orgid)
from <organisationtable>

Я думаю, что можно сделать это с, ОБЪЕДИНЯЮТ () также, но не может помнить синтаксис первое, что пришло на ум

2
ответ дан 4 December 2019 в 08:54
поделиться

При использовании Oracle, можно создать МН функциональное / SQL, функциональный, можно использовать в запросе, который принимает organization_id как вход и возвращает имя всех сотрудников, принадлежащих этому org как строка. Например:-

select
   o.org_id,
   o.org_address,
   o.org_otherdetails,
   org_employees( o.org_id ) as org_employees
from
   organization o
0
ответ дан 4 December 2019 в 08:54
поделиться

Все это зависит. Если Вы делаете соединение, Вы получаете все организационные данные по каждой строке. (1 строка на сотрудника). Это имеет стоимость. Если Вы делаете два запроса. (Org и Emp), который имеет другую стоимость.

Выберите свой яд.

0
ответ дан 4 December 2019 в 08:54
поделиться

Короткий ответ является "нет".

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

извините об этом :(

По-видимому, один из поставщика определенные решения будет работать на Вас?

0
ответ дан 4 December 2019 в 08:54
поделиться

Вот то, что можно сделать, у Вас есть 2 опции:

select *
FROM
  users u
  LEFT JOIN organizations o ON (u.idorg = o.id);

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

Или можно сделать:

select o.*, group_concat(u.name)
FROM
  users u
  LEFT JOIN organizations o ON (u.idorg = o.id)
GROUP BY
  o.id

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

Второй подход применим, если Вы хотите видеть т.е. список имен пользователей "user1, user2, user3", но не хотите воздействовать на сами поля...

0
ответ дан 4 December 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: