SQL присоединяется для отображения данных без внешнего ключа, чтобы идентифицировать данные для извлечения

Я пытаюсь получить данные о клиентах тренера из 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,

-1

Решение

Попробуйте использовать левое соединение. Затем вы получаете данные из обеих таблиц.

$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."%'" и т.д. для каждого поля и убедитесь, что поля правильно проиндексированы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]