Результат MySQL печатает больше, чем один

0

В моей базе данных у меня есть отношение "один ко многим", где у одного родителя может быть много детей. Первичным ключом является адрес электронной почты родителей. Я запрашиваю детей

$results1 = mysqli_query($con,"
SELECT directory.email
     , dirKids.kname
     , dirKids.kbirthday 
  FROM directory 
  JOIN dirKids 
    ON '$row[email]' = dirKids.parent
");

Затем я просматриваю и echo значение на моей странице html

while($row1 = mysqli_fetch_array($results1)) {
    if (!empty($row1["kname"])) {
        echo "<tr><td>". $row1["kname"] ."</td><td>".
        $row1["kbirthday"]."</td></tr>";
    }
}

Проблема, с которой я столкнулась, состоит в том, что только один родитель имеет детей в моей базе данных, но он будет печатать имя и день рождения детей 10 раз, потому что в моей базе данных 10 человек. Как я могу заставить его печатать только имя ребенка и день рождения?

Мой полный код приведен ниже:

<?php
    $con = mysqli_connect("localhost", "username", "password", "db");
    // Check connection
    if (mysqli_connect_errno()) {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $results = mysqli_query($con,"SELECT directory.id, directory.fname, directory.lname, directory.address, directory.bdname, directory.birthday, directory.cell, directory.email, directory.sFName, directory.sBirthday, directory.sCell, directory.sEmail FROM directory ORDER BY lname") or die ("couldn't fetch query");

    echo "<div class='accordion' id='accordion'>";


    // output data of each row
    while($row = mysqli_fetch_array($results)) {

    $results1 = mysqli_query($con,"SELECT directory.email, dirKids.kname, dirKids.kbirthday FROM directory JOIN dirKids ON '$row[email]' = dirKids.parent");

    echo "</table></div>";
    if ($row['sFName'] == "" || $row['sFName'] == "undefined") {
        echo "<div class='card'><div class='card-header'
        id='headingOne'><h5 class='mb-0'><button class='btn btn-link' 
        type='button' data-toggle='collapse' data-target='#collapse".
        $row["id"] ."' aria-expanded='true' aria-controls='collapse".
        $row["id"] . "'><h5>".$row["fname"] ."<span id='lnameText'>".
        $row["lname"] ."</span></h5></button></h5></div><div
        id='collapse". $row["id"] . "' class='collapse'
        aria-labelledby='headingOne' data-parent='#accordion'><div
        class='card-body'><table id='myUL' class='table'><tr></tr><tr>
        <td><h5>Address</h5></td><td>". $row["address"] ."</td></tr>
        <tr><td><h5>Birthday</h5></td><td>".$row["birthday"]."</td>
        </tr><tr><td><h5>Cell</h5></td><td>". $row["cell"]."</td></tr>
        <tr><td><h5>Email</h5></td><td>". $row["email"] ."</td></tr>
        </table></div>";

    echo "<div class='col-md-6'><h3>Children</h3><table class='table'><tr><th><h5>Name</h5></th><th><h5>Birthday</h5></th>";

    while($row1 = mysqli_fetch_array($results1)) {
        if (!empty($row1["kname"])) {
            echo "<tr><td>". $row1["kname"] ."</td><td>". $row1["kbirthday"]."</td></tr>";
        }
    }

    echo "</table></div></div>";
?>
  • 0
    SELECT directory.email, dirKids.kname, dirKids.kbirthday FROM directory d JOIN dirKids k ON d.email = k.parent AND k.parent = '$row[email]' ?
Теги:

3 ответа

0
Лучший ответ

Поскольку данные, необходимые для второго цикла while, происходят исключительно из таблицы Kids, просто создайте для него инструкцию SELECT, забудьте о соединении, а инструкция WHERE ищет только адрес электронной почты родителей.

Код ниже находится внутри первичного цикла while и заменяет

$results1 = mysqli_query($con,"SELECT directory.email, dirKids.kname, dirKids.kbirthday FROM directory JOIN dirKids ON '$row[email]' = dirKids.parent");

с

//Build the select statement
$sql = "SELECT kname, kbirthday FROM dirKids WHERE parent = '" .$row[email] . "'";
//now run the query
$results1 = mysqli_query($con,$sql);
//uncomment the below to see the results
//var_dump(mysqli_fetch_array($results1));
  • 1
    Спасибо! Это сработало для меня
0

Не знаете, что вам нужно. Поскольку вы отправили 2 разных запроса.

Но у первого есть неправильный подход, надеюсь, вам нужно исправить это.

Я думаю, вы имели в виду что-то вроде:

SELECT directory.email
     , dirKids.kname
     , dirKids.kbirthday 
  FROM directory 
  JOIN dirKids 
    ON directory.email = dirKids.parent
 WHERE directory.email = '$row[email]'
0

Ваш запрос должен выглядеть так:

$select = mysqli_query($db, "SELECT * FROM parents_database WHERE parent_name = '$parent_name'");
while ($row = mysqli_fetch_array($select, MYSQLI_ASSOC)) {
  // echo kids here..
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню