Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 左连接不连接数据_Php_Mysql - Fatal编程技术网

Php 左连接不连接数据

Php 左连接不连接数据,php,mysql,Php,Mysql,尝试联接两个表以根据第一个表(学生\大学时间表)计算种族,其中学生可能会出现一次以上。表2(student_info)只显示了一次学生ID和学生种族。我使用左连接是因为有时我的学生信息表中可能有一个失踪的学生,他们不会被计算在内(因为他们的种族没有被宣布) 正在查看包含种族和计数的摘要: 白色50 黑色25 西班牙裔15 亚洲10 使用我的查询,结果显示为: “空白”60 白色20 黑色15 西班牙裔3 亚洲2 要统计的学生总数是正确的,但种族似乎不符合表1(学生计划表)。不知道“空白”是从哪里

尝试联接两个表以根据第一个表(学生\大学时间表)计算种族,其中学生可能会出现一次以上。表2(student_info)只显示了一次学生ID和学生种族。我使用左连接是因为有时我的学生信息表中可能有一个失踪的学生,他们不会被计算在内(因为他们的种族没有被宣布)

正在查看包含种族和计数的摘要: 白色50 黑色25 西班牙裔15 亚洲10

使用我的查询,结果显示为: “空白”60 白色20 黑色15 西班牙裔3 亚洲2


要统计的学生总数是正确的,但种族似乎不符合表1(学生计划表)。不知道“空白”是从哪里来的。仅供参考,它不会空白打印。它只是显示为丢失,旁边有一个数字。有人能帮我检查一下我的问题吗?我一定遗漏了什么。

你把左连接原理和右连接混淆了。 这句话是错误的:“我使用的是左连接,因为有时我的学生信息表中可能有一个失踪的学生,他们不会被计算在内(因为他们的种族没有被宣布)。”

LEFT JOIN关键字返回左表(表1)中的所有行,右表(表2)中有匹配的行。当没有匹配项时,右侧的结果为空

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

因此,要使其工作,您应该使用右连接

您将左连接原则与右连接混淆了。 这句话是错误的:“我使用的是左连接,因为有时我的学生信息表中可能有一个失踪的学生,他们不会被计算在内(因为他们的种族没有被宣布)。”

LEFT JOIN关键字返回左表(表1)中的所有行,右表(表2)中有匹配的行。当没有匹配项时,右侧的结果为空

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

因此,要使其正常工作,您应该使用RIGHT JOIN

仅尝试使用,按学生信息进行分组,并检查是否为null

 SELECT ifnull(student_info.Ethnicity, 'not_declared'), COUNT(*)
 FROM student_schedule LEFT JOIN student_info ON     
 student_schedule.ID=student_info.ID
 WHERE student_schedule.Course LIKE 'AS%'
 GROUP BY student_info.Ethnicity
 ORDER BY COUNT(DISTINCT student_schedule.ID) DESC


 SELECT ifnull(student_info.Ethnicity, 'not_declared'), (COUNT(*)/ (select count(*) FROM student_schedule LEFT JOIN student_info ON     
 student_schedule.ID=student_info.ID
 WHERE student_schedule.Course LIKE 'AS%'))* 100
 FROM student_schedule LEFT JOIN student_info ON     
 student_schedule.ID=student_info.ID
 WHERE student_schedule.Course LIKE 'AS%'
 GROUP BY student_info.Ethnicity
 ORDER BY COUNT(DISTINCT student_schedule.ID) DESC

请尝试仅使用,按student_info.ethericity分组,并检查是否为空

 SELECT ifnull(student_info.Ethnicity, 'not_declared'), COUNT(*)
 FROM student_schedule LEFT JOIN student_info ON     
 student_schedule.ID=student_info.ID
 WHERE student_schedule.Course LIKE 'AS%'
 GROUP BY student_info.Ethnicity
 ORDER BY COUNT(DISTINCT student_schedule.ID) DESC


 SELECT ifnull(student_info.Ethnicity, 'not_declared'), (COUNT(*)/ (select count(*) FROM student_schedule LEFT JOIN student_info ON     
 student_schedule.ID=student_info.ID
 WHERE student_schedule.Course LIKE 'AS%'))* 100
 FROM student_schedule LEFT JOIN student_info ON     
 student_schedule.ID=student_info.ID
 WHERE student_schedule.Course LIKE 'AS%'
 GROUP BY student_info.Ethnicity
 ORDER BY COUNT(DISTINCT student_schedule.ID) DESC

您误解了左连接的含义。我建议您阅读关于SO(最好的图形解释)

基本上,
LEFT JOIN
包含JOIN的第一个(左)表中的所有行,并连接第二个(右)表中匹配连接条件的行,或者如果第二个(右)表中没有匹配行,则添加
NULL

如果要排除没有种族信息的行,则需要执行以下操作之一:

  • 进行
    内部联接
    (排除不匹配的行,在您的情况下,排除没有学生信息的学生)
  • 在学生信息不为空的情况下,使用添加的条件进行右连接
  • 这两种方法都将消除“空白”行,并且
    计数仍将正确进行。像这样(我使用[内部]连接):


    您误解了左连接的含义。我建议您阅读关于SO(最好的图形解释)

    基本上,
    LEFT JOIN
    包含JOIN的第一个(左)表中的所有行,并连接第二个(右)表中匹配连接条件的行,或者如果第二个(右)表中没有匹配行,则添加
    NULL

    如果要排除没有种族信息的行,则需要执行以下操作之一:

  • 进行
    内部联接
    (排除不匹配的行,在您的情况下,排除没有学生信息的学生)
  • 在学生信息不为空的情况下,使用添加的条件进行右连接
  • 这两种方法都将消除“空白”行,并且
    计数仍将正确进行。像这样(我使用[内部]连接):


    有没有办法让结果占总结果的百分比?换句话说,SELECT语句是否可以在编写时考虑百分比?我想在SELECT语句中这样做,这样我就不必使用PHP.Wow进行翻译了!令人惊叹的。感谢您的帮助。scaisEdge第1行有来自的2。这是正确的还是错误的?我只更新了一个答案。。也是正确的,你能帮我让SELECT语句显示种族,占种族总数的百分比,占种族总数的百分比(不带WHERE student_Schedule.Course='AS%')。这样,我的结果就可以显示出占总在校人口百分比的学生人数。有没有办法让结果占总人数的百分比?换句话说,SELECT语句是否可以在编写时考虑百分比?我想在SELECT语句中这样做,这样我就不必使用PHP.Wow进行翻译了!令人惊叹的。感谢您的帮助。scaisEdge第1行有来自的2。这是正确的还是错误的?我只更新了一个答案。。也是正确的,你能帮我让SELECT语句显示种族,占种族总数的百分比,占种族总数的百分比(不带WHERE student_Schedule.Course='AS%')。这样,我的结果就可以显示有多少人的入学率占学校总人口的百分比。