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

Я пытаюсь получить данные клиентов тренера из таблицы 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 ВЛЕВО ПОДКЛЮЧЕНО feed_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 Ответ

0 голосов
/ 03 января 2019

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

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

...