MySQL выбрать первичную запись и несколько вторичных записей в качестве отсортированного набора данных - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть две таблицы: locations и events

В каждой локации может быть несколько событий.Я успешно выполняю один запрос, чтобы получить все местоположения и соответствующие события, однако события возвращаются как объединенный набор данных со всеми данными location.Мне нужно как-то перечислить все и все события как подстроки, чтобы я мог правильно обработать их позже.

Этот запрос:

"select locations.*,events.* FROM locations,events WHERE locations.lid = events.lid AND locations.lid=1001"

Возвращает объединенные данные, например:

data [array 1]
   0: lid: "1001"  // location info
      name: "Johns Bar"
      address1: "123 Main St"
      ...
      ...
      eventID: "1000" // event info
      eName: "Halloween Bash"
      eDate: "2018-10-31"
      ...
      ...

Можно ли получить конкретный locations.lid и все соответствующие events.lid и иметь записи events, перечисленные как подмножество location данных.

Что-то, что могло бывернуть как:

data [array 1]
   0: lid: "1001"
      name: "Johns Bar"
      address1: "123 Main St"
      ...
      ...
      Events: [array 5]
         0: lid: "1001"
            eventID: "1000"
            eName: "Halloween Bash"
            eDate: "2018-10-31"
            ...
            ...
         1: lid: "1001"
            eventID: "1010"
            eName: "Christmas Party"
            eDate: "2018-12-17"
            ...
            ...
         2: [lid: "1001",...]
         3: [lid: "1001",...]
         4: [lid: "1001",...]

1 Ответ

0 голосов
/ 20 ноября 2018

, поэтому все совпадающие события всегда возвращаются как часть одной возвращаемой строки?Нет ли способа получить вторичные записи для перечисления в виде подстрок / записей?

Да, так работает JOIN.

Если нет, то это заставит меня сделать два запроса ... или есть другой метод?

Нет, вам не нужно запускать несколько запросов.

Вы можете получить свой результирующий набор, поскольку SQL возвращает его, с парами совпадающих строк location и event.Убедитесь, что вы сортируете по location в своем запросе SQL.

Затем, когда вы выбираете строки результата, отслеживайте «текущее» местоположение переменной в вашем клиентском приложении.Если вы извлекаете строку и ее местоположение совпадает с местоположением, которое вы видели ранее, игнорируйте ее.

Псевдокод:

sql = SELECT ... FROM location JOIN event ... ORDER BY location
execute sql
location = nil
while row = fetch():
  if row[location] != location:
    print location
  end if
  location = row[location] # for next time
  print event
end while

Это общий шаблон для обработки наборов результатов SQL.

...