2016-05-11 2 views
1

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

Заметка имеет идентификатор, owner_id и данные. На самом деле, когда нагрузка на страницу, я сделать основной SELECT, запрос, чтобы получить все внимание пользователя и отображать его с PHP цикла и принести:

$stmt = $conn->prepare("SELECT id, data FROM notes WHERE owner = ?"); 
$stmt->bind_param("s", $_SESSION["id"]); 

[...] 

while($stmt->fetch()){ 
    display_note($note_id, $data); 
} 

В таблице ноты выглядит следующим образом:

Note(id, owner, data) 

Я пытаюсь добавить теги к заметкам. Для того, чтобы сделать что создали две дополнительные таблицы:

Tags(id, name) 
Note_tags(note_id, tag_id) 

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

Затем я добавляю запись в таблицу note_tags с идентификатором примечания и идентификатором тега.

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

Я думал, что должен выполнить запрос SELECT для каждой ноты, но я думаю, что это не лучшее решение. Например, если пользователь имеет более 100 заметок, делает ли 100 запросов хорошей идеей?

Если они не являются лучшим решением, так как делать вложенные запросы в PHP?

Благодарим за помощь.

ответ

1

Вам необходимо построить многомерный массив.

Во-первых, получить все заметки и теги:

SELECT notes.id, data, tag_id, tags.name AS tag_name 
FROM notes 
LEFT JOIN note_tags ON note_id = tag_id 
LEFT JOIN tags ON tags.id = tag_id 
WHERE owner = ? 

Затем перебирать в результате построить массив

$data = array(); 
while($row = $stmt->fetch()){ 
    $data[$row["id"]]["data"] = $row["data"]; 
    $data[$row["id"]]["tags"][$row["tag_id"]] = $row["tag_name"]; 
} 

Теперь вы должны иметь массив, который выглядит следующим образом:

[ 
    { 
     "data":"The content of a note", 
     "tags": [ 
      "the name of a tag", 
      "the name of an other tag" 
     ] 
    }, 
    { 
     "data":"The content of an other note", 
     "tags": [ 
      "the name of a tag", 
      "the name of an other tag" 
     ] 
    } 
] 
Смежные вопросы