gpt4 book ai didi

php - 根据其 id 将查询的值组合在一起

转载 作者:行者123 更新时间:2023-11-30 22:56:34 25 4
gpt4 key购买 nike

我有来自数据库的数据,我正在使用 JOIN(s) 从不同的表中选择数据,我需要能够根据与特定类(class)相关的用户的特定 ID 将数据分组在一起,由于需要根据选择发送电子邮件,并且在此选择中(使用单选按钮),它将允许管理员能够向分配给所选特定类别的所有用户发送电子邮件

我目前正在获取重复的数据,例如用户详细信息将显示在每个类别中,而不是在一个单独的类别中传递到数组以发送电子邮件。我只需要为每个类别/类(class)选择一个单选按钮,但现在我得到了多个单选按钮。

这是我的查询:

$query="SELECT * FROM course_student
JOIN course ON course.course_id=course_student.course_id
JOIN student ON student.student_id=course_student.student_id
WHERE course.course_id=course_student.course_id
ORDER BY course.course_id";

这是我选择数据的循环——它为条目创建了重复的名称,我只想要一个包含所有应该包含在其中的数据的名称

$result=mysqli_query($connection,$query);
confirmation($connection);

while($course_email_students = mysqli_fetch_assoc($result)){
$course_email = $course_email_students['student_email'];
$course_name = $course_email_students['course_name'] ."<br/>";

这是我的 html:

<input type="radio" name="course_mail[]" value="<?php echo $course_email ;?>">
<?php echo $course_name ?>


<?php } ?>

这里有更多代码HTML

<form action ="#" method="POST">

<P> <label for="">Send to specific student courses</label>


</p>




<?php // email specific students


$query = "SELECT student.student_email, course.course_name, course.course_id
FROM course_student
JOIN student ON student.student_id=course_student.student_id
JOIN course ON course.course_id=course_student.course_id
GROUP BY student.student_email, course.course_id
ORDER BY course.course_id";
$result=mysqli_query($connection,$query);
confirm_query($connection);
while($course_email_students=mysqli_fetch_assoc($result)){
$course_student_email=$course_email_students['student_email'];
$course_student_email_name=$course_email_students['course_name'] ."<br/>";


var_dump($course_email_students['student_email']);


?>

<input type="radio" name="course_email[]" value="<?php echo $course_student_email ;?>">
<?php echo $course_student_email_name ?>
<P> <label for="">Message</label>
<p><textarea rows="10" cols="20" name="message"></textarea></p>

</p>

<input type="submit" name="submit" value="send">

这是用于测试的 php 以查看通过的内容

    if(isset($_POST['submit'])){

// do validation


if(isset($_POST['course_email'])){

var_dump($_POST['course_email']);



}




}

最佳答案

从您发布的 PHP 来看,您似乎只是在查询中使用来自两个(可能是三个)列的数据。如果是这样,在 SQL 中选择您感兴趣的特定列会更有效。查询中也存在冗余,您在 WHERE 中使用与在 JOIN 中相同的条件:

$query="SELECT student.student_email, course.course_name, course.course_id FROM course_student
JOIN student ON student.student_id=course_student.student_id
JOIN course ON course.course_id=course_student.course_id <-- !!!
WHERE course.course_id=course_student.course_id <-- !!!
ORDER BY course.course_id";

有两种方法可以使用此选择查询来选择唯一的结果组合;你可以使用 DISTINCTGROUP BY .

不同的:

$query = "SELECT DISTINCT student.student_email, course.course_name, course.course_id
FROM course_student
JOIN student ON student.student_id=course_student.student_id
JOIN course ON course.course_id=course_student.course_id
ORDER BY course.course_name";

分组依据:

$query = "SELECT student.student_email, course.course_name, course.course_id, student.student_id
FROM course_student
JOIN student ON student.student_id=course_student.student_id
JOIN course ON course.course_id=course_student.course_id
GROUP BY student.student_email, course.course_name
ORDER BY course.course_name";

现在是 PHP 代码:

$c_name = '';  # course name
$c_id = ''; # course ID
$students = array();
while($aa = mysqli_fetch_assoc($result){

if ($aa['course_name'] !== $c_name) {
# the course name has changed. print out the course and student data
make_radios($c_name, $c_id, $students);

# set c_name to the new course name
$c_name = $aa['course.course_name'];
$c_id = $aa['course.course_id'];
# set the students to the new student
$students = array( $aa['student.student_email'] );
}
else {
# add this student to the list of students
$students[] = $aa['student.student_email'];
}
}
# print out the last set of data
make_radios( $c_name, $c_id, $students );


function make_radios( $course_name, $course_id, $email_arr ) {

$html = '<input type="radio" id="email'
. $course_id . '" name="course_email[]" value="'
. implode(',', $email_arr) . '"> <label for="email'
. $course_id . '">$course_name</label>';
# I don't know if you want to list all the email addresses or not... in case you do:
$html .= "<ul>";
foreach ($email_arr as $e) {
$html .= "<li>$e</li>\n";
}
$html .= "</ul>";

# append the message box
$html .= '<label for="message' . $course_id . '">Message</label>'
. '<textarea id="message' . $course_id . '" rows="10" cols="20" name="message">'
. "</textarea>\n";

echo $html; # or you could return $html
}

我不建议您在表单上使用电子邮件地址——我会使用学生 ID 和学生姓名,然后让您的脚本从数据库中提取适当的电子邮件地址——但它是对你来说,显然。

请通读代码并检查您是否理解它在做什么。我很乐意回答任何问题。

关于php - 根据其 id 将查询的值组合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26125464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com