#php #mysql #database
#php #mysql #База данных
Вопрос:
извините, что снова беспокою вас, но я действительно застрял!
Как было бы возможно выполнить оператор if, ссылающийся на то, где были данные из определенного столбца или нет, или удалить последнее число в имени столбца и ссылаться на него таким образом?
В принципе, у меня есть база данных музыкантов, где пользователь из таблицы PEOPLE связан через ID с инструментами в таблице INSTRUMENTS, у меня есть функция поиска по электронной почте, которая мне нужна для отправки относительных данных на относительные инструменты. Итак, если кто-то играет на гитаре в качестве второго инструмента, а кто-то другой играет на ней в качестве пятого, мне нужны соответствующие оценки, стандарт и комментарии, которые будут отправлены вместе с ними по электронной почте. Функция.
Я хочу получить комментарии [i], класс [i], стандарт [i] соответствующего инструмента[i]
Мой макет таблиц: (Я знаю, что это не очень эффективно, и я рассмотрю нормализацию базы данных в будущем!)
ТАБЛИЦА:ИНСТРУМЕНТЫ
СТОЛБЦЫ:
id instrument1 grade2 standard3 comments4
instrument2 grade2 standard2 comments2
instrument3 grade3 standard3 comments3
instrument4 grade4 standard4 comments4
instrument5 grade5 standard5 comments5
ТАБЛИЦА: ЛЮДИ
СТОЛБЦЫ:
id first last snumber course email graduate inumber
Редактировать:
while($getresults = mysql_fetch_assoc($result)){
$peoplequery = "SELECT * FROM people WHERE id = {$getresults [id]}";
$peopleresults = @mysql_query($peoplequery);
$getpeopleresults = mysql_fetch_assoc($peopleresults);
//add the details returned by the database to the table:
$table .= "
<td><p>{$getpeopleresults [first]} {$getpeopleresults [last]}</p></td>
<td><p>{$getpeopleresults [email]}</p></td>
<td><p>{$getpeopleresults [course]}</p></td>
<td><p>{$getresults [grade]}</p></td>
<td><p>{$getresults [standard]}</p></td>
<td><p>{$getresults [comments]}</p></td></tr>
<tr><td colspan=8><hr size=1 color=gray></td></tr>
}
";
}
Комментарии:
1. Вы правы: будет проще исправить дизайн базы данных, как только приложение будет завершено:-P
Ответ №1:
Вы чувствуете себя по-настоящему застрявшим, потому что пытаетесь вдавить квадратный колышек в круглое отверстие. Это было бы действительно просто, если бы вы использовали табличный макет, который позволял бы вам использовать вашу базу данных так, как она должна функционировать.
Единственный способ, который сработает на данный момент, — это писать безумно длинные SQL-инструкции, тщательно пробуя каждую возможность или объединяя все поля и ища частичные совпадения. Пожалуйста, не делайте этого. Потратьте некоторое время на изменение макета таблицы, чтобы вы могли использовать соединения и запросы, используя стандартные методы SQL.
Комментарии:
1. Круто, хорошо, тогда я попробую начать снова — спасибо.
2. Судя по всему, вам понадобятся отдельные таблицы для инструментов, оценок, стандартов и комментариев, а затем связать их с людьми с помощью ключа «многие к одному». Из вашего вопроса неясно, каким именно должен быть макет или что к чему привязано, но уникальные элементы (такие как люди или типы instument) должны иметь уникальные идентификаторы, тогда они должны быть связаны с другой таблицей пар id-id . Оценки и комментарии могут не нуждаться в таблицах ссылок, если каждый комментарий или оценка индивидуальны для конкретного пользователя, для создания ссылки достаточно просто указать этого пользователя в качестве столбца с внешним ключом в этих таблицах.
Ответ №2:
Я согласен с @Caleb, Но все же вы хотите придерживаться этого дизайна базы данных, вы можете сделать вот так, это наиболее эффективный способ из-за вашей структуры базы данных.
Я не тестировал это, поэтому могут быть некоторые синтаксические ошибки.
$selQuery = "select * from instruments LEFT JOIN people ON instruments.id=people.id where instrument1 like 'guitar' OR instrument2 like 'guitar' OR instrument3 like 'guitar' OR instrument4 like 'guitar' OR instrument5 like 'guitar'";
$resQuery = mysql_query($selQuery)
$peoples = array();
while($row = mysql_fetch_assoc($resQuery))
{
for($i = 1; $i<= 5; $i )
{
if(strtolower($row['instrument'.$i]) == strtolower('Guitar'))
{
$people = array();
$people['id'] = $row['id'];
$people['first'] = $row['first'];
$people['email'] = $row['email'];
$people['instrument'] = $row['instrument'.$i];
$people['grade'] = $row['grade'.$i];
$people['standard'] = $row['standard'.$i];
$people['comments'] = $row['comments'.$i];
array_push($peoples , $people);
break;
}
}
}
хорошо, я просмотрел ваш код,
внесите изменения, как показано ниже
//Find instruments searched for:
$query = "SELECT * from instruments where '$search' in (instrument , instrument2, instrument3, instrument4, instrument5)";
$result = @mysql_query($query);
//Start building the table:
$table = "<th><p><b>You searched for $search</b></p></th>
<table>
<th> <p><b>Name </b></p></th>
<th> <p><b>Email </b></p> </th>
<th> <p><b>Course </b></p></th>
<th> <p><b>Grade </b></p></th>
<th> <p><b>Standard </b></p></th>
<th> <p><b>Comments</b></p>
</th></tr>";
$peoples = array();
while($row = mysql_fetch_assoc($result)){
if(strtolower($row['instrument']) == strtolower($search))
{
$people = array();
$people['id'] = $row['id'];
$people['instrument'] = $row['instrument'.$i];
$people['grade'] = $row['grade'.$i];
$people['standard'] = $row['standard'.$i];
$people['comments'] = $row['comments'.$i];
array_push($peoples , $people);
continue;
}
for($i = 2; $i<= 5; $i )
{
if(strtolower($row['instrument'.$i]) == strtolower($search))
{
$people = array();
$people['id'] = $row['id'];
$people['instrument'] = $row['instrument'.$i];
$people['grade'] = $row['grade'.$i];
$people['standard'] = $row['standard'.$i];
$people['comments'] = $row['comments'.$i];
array_push($peoples , $people);
break;
}
}
}
foreach($peoples as $people)
{
$peoplequery = "SELECT * FROM people WHERE id = '".$people[id]."'";
$peopleresults = @mysql_query($peoplequery);
$getpeopleresults = mysql_fetch_assoc($peopleresults);
//add the details returned by the database to the table:
$table .= "
<td><p>{$getpeopleresults[first]} {$getpeopleresults[last]}</p></td>
<td><p>{$getpeopleresults[email]}</p></td>
<td><p>{$getpeopleresults[course]}</p></td>
<td><p>{$people[grade]}</p></td>
<td><p>{$people[standard]}</p></td>
<td><p>{$people[comments]}</p></td></tr>
<tr><td colspan=8><hr size=1 color=gray></td></tr>
}
";
}
Комментарии:
1. Круто — в настоящее время у меня просто есть ‘$query = «SELECT * FROM instruments WHERE ‘$search’ IN (instrument , instrument2, instrument3, instrument4, instrument5»; $result = @mysql_query ($ query); ‘ — как я мог бы адаптировать это к вашему коду?
2. просто замените $selQuery на это «ВЫБЕРИТЕ * из инструментов, оставленных присоединиться к людям на instruments.id = люди. идентификатор, где ‘$search’ в (instrument1 , instrument2, instrument3, instrument4, instrument5» $result = @mysql_query($query); это может сработать. желаю удачи.
3. @Maulik Приближается, я чувствую это, пожалуйста, проверьте правку моего вопроса, я думаю, это единственное, что мне сейчас нужно отредактировать, это фрагмент кода, который использует функция электронной почты. Что мне нужно здесь изменить?
4. @toby ты пробовал весь мой код? Массив $ peoples может предоставлять вам все, что вы хотите. на самом деле я ничего не понял из вашего обновленного вопроса, пожалуйста, добавьте еще немного кода или попробуйте все, что я указал в своем коде
5. @Maulik — Я проверил синтаксис, в инструменте не хватало 1, он прекрасно работает. СПАСИБО !!! 🙂