Я создаю CRM для себя. Моя база данных содержит четыре таблицы. В разделе моего сайта я хочу, чтобы в цикле все [примечание] и [задача] были связаны с [контактом].Показать несколько запросов sql и заказать их по timestamp
[ссылка] (Соединение контакта с задачей)
'id' 'contact_id' 'task_id'
'1' '1' '1'
[контакт]
'id' 'contact_name'
'1' 'Robert'
[задача]
'id' 'description' 'due_date'
'1' 'Call to say hello' '2016:06:13'
[примечание] (Примечание ссылки непосредственно к контакту)
'id' 'contact_id' 'text' 'date_entered'
'1' '1' 'I met Robert on the weekend.' '2016:06:12'
Единственный способ, который я знаю на данный момент, - создать два отдельных запроса. Один для выбора и отображения информации о задаче ...
$contact_id_for_example = '1'
$find_the_link = $mysqli->query("SELECT * FROM link WHERE contact_id = '$contact_id_for_example'");
if($find_the_link->num_rows != 0){
while($link_rows = $find_the_link->fetch_assoc())
{
$link_task_id = $link_rows['task_id'];
$find_the_task = $mysqli->query("SELECT * FROM task WHERE id = '$link_task_id' ORDER BY due_date");
if($find_the_task->num_rows != 0){
while($task_rows = $find_the_task->fetch_assoc())
{
$task_description = $task_rows['description'];
echo '<li>'.$task_description.'</li>';
}
}
ой один для отображения информации примечания ..
$note_select = $mysqli->query("SELECT * FROM note WHERE contact_id = '$contact_id_for_example' ORDER BY 'date_entered'");
if($note_select->num_rows != 0){
while($note_rows = $note_select->fetch_assoc())
{
$note_text = $note_rows['text'];
echo '<li>'.$note_text.'</li>';
}
}
Проблемы с моим методом является то, что приведенным выше код будет печатать все сначала выполняются соответствующие задачи, а затем все примечания ниже. Даже если первая заметка была введена/должна задолго до задания, она будет всегда печатать после задач.
Я просмотрел JOINS и не вижу, как это будет работать в этом случае из-за того, что таблица [link] соединяет таблицу [contact] и [task].
Я также искал вокруг этого сайта и других и заметил Multiple Queries., но из того, что я прочитал до сих пор, это также не решает проблему.
Вот моя попытка:
$test_contact_id = '1068';
$query = "SELECT * FROM link WHERE contact_id = '$test_contact_id';";
$storing_link = $query->num_rows;
$find_task_id = $storing_link->fetch_fields();
$find_task_id->task_id;
$query .= "SELECT * FROM task WHERE id = '$find_task_id';";
$storing_task = $query->num_rows;
$find_task_description = $storing_task->fetch_fields();
$task_description->text;
$query .= "SELECT * FROM note WHERE contact_id = '$test_contact_id';";
$storing_note = $query->num_rows;
$find_note_text = $storing_note->fetch_fields();
$note_text = $find_note_text->text;
if($mysqli->multi_query($query)){
echo '<p>'.$task_description.' :: '.$note_text.'</p>';
}
Спасибо, что посмотрю на это и вернусь. – Bjaeg