Я пытаюсь получить данные о клиентах тренера из client
таблица, которая относится только к пользователю из personal_trainer
Таблица. Однако в таблице клиента отсутствует внешний ключ для идентификации тренера.
Я создал две другие таблицы nutrition
а также training
которые имеют как ClientID, так и personalTrainerID в качестве внешних ключей из соответствующих таблиц. Мне интересно, что такое оператор SQL для получения данных?
Логика, которую я пытаюсь создать, такова: если тренер (personaltrainerID) создал план трианинга / питания и назначил его клиенту (clientID), на выходе получаются все клиенты, которым назначен план обучения / питания.
Первый $query
для функции поиска, которая работает, проблема заключается в утверждении
$query = "SELECT * from client AS t1 LEFT JOIN nutrition_plan AS t2 ON personalTrainerID = clientID";
Полный код:
<?php
//code to search for a item from the database
// user can enter any character to search for a value from the db
if (isset($_POST['search'])) {
$valueToSearch = $_POST['ValueToSearch'];
$query = "SELECT * FROM client WHERE concat(`clientID`, `name`, `age`, `sex`, `weight`, `height`, `yearsExperience`, `goal`, `injuries`, 'email')LIKE'%".$valueToSearch."%'";
$search_result = filterTable($query);
} else {
$ query = «SELECT * от клиента AS t1 ВЛЕВО ПОДКЛЮЧЕНИЕ nutrition_plan AS t2 ON personalTrainerID = clientID»;
$ search_result = filterTable ($ query);
}
//code to filter the db
function filterTable($query)
{
$connect = mysqli_connect('localhost:3308', 'root', '', 'fypdatabase');
$filter_Result = mysqli_query($connect, $query);
return $filter_Result;
}
?>
<?php
while ($row = mysqli_fetch_array($search_result)) {
//display the details from the db in the table with option to delete or update entry
?>
<tr>
<td><?php echo $row['clientID']; ?></td>
<td><?php echo $row['name']; ?></td>
<td><?php echo $row['age']; ?></td>
<td><?php echo $row['sex']; ?></td>
<td><?php echo $row['weight']; ?></td>
<td><?php echo $row['height']; ?></td>
<td><?php echo $row['yearsExperience']; ?></td>
<td><?php echo $row['goal']; ?></td>
<td><?php echo $row['injuries']; ?></td>
<td><?php echo $row['email']; ?></td>
<td>
<a href="?Delete=<?php echo $row['clientID']; ?>" onclick="return confirm('Are you sure?');">Delete</a>
</td>
<td>
<a href="updateClient.php?Edit=<?php echo $row['clientID']; ?>" onclick="return confirm('Are you sure?');">Update</a>
</td>
</tr>
<?php
}
Таблицы:
CREATE TABLE IF NOT EXISTS `training_plan` (
`trainingPlanID` int(11) NOT NULL AUTO_INCREMENT,
`personalTrainerID` int(11) NOT NULL,
`clientID` int(11) NOT NULL,
`trainingType` varchar(30) NOT NULL,
`exercise1` varchar(30) NOT NULL,
CREATE TABLE IF NOT EXISTS `nutrition_plan` (
`nutritionplanID` int(11) NOT NULL AUTO_INCREMENT,
`personaltrainerID` int(11) NOT NULL,
`clientID` int(11) NOT NULL,
`nutritionPlan` varchar(30) NOT NULL,
`mealType` varchar(30) NOT NULL,
CREATE TABLE IF NOT EXISTS `personal_trainer` (
`personalTrainerID` int(11) NOT NULL,
`name` varchar(30) NOT NULL,
`location` varchar(30) NOT NULL,
`age` int(11) NOT NULL,
`sex` varchar(30) NOT NULL,
`yearsExperience` int(11) NOT NULL,
CREATE TABLE IF NOT EXISTS `client` (
`clientID` int(11) NOT NULL,
`name` varchar(30) NOT NULL,
`age` int(11) NOT NULL,
`sex` varchar(30) NOT NULL,
`weight` int(11) NOT NULL,
Попробуйте использовать левое соединение. Затем вы получаете данные из обеих таблиц.
$query = "SELECT * from client WHERE email = (SELECT clientID FROM nutrition_plan WHERE personalTrainerID=clientID)";
изменить SQL на:
$query = "SELECT * from client AS t1 LEFT JOIN nutrition_plan AS t2 ON personalTrainerID = clientID";
Дальше больше вашего запроса:
$query = "select * from client WHERE concat(`clientID`, `name`, `age`, `sex`, `weight`, `height`, `yearsExperience`, `goal`, `injuries`, 'email')like'%".$valueToSearch."%'";
Приведет к медленному выполнению на больших таблицах. Сделать или 'name' like'%".$valueToSearch."%'"
и т.д. для каждого поля и убедитесь, что поля правильно проиндексированы.
Других решений пока нет …