Avatar billede xzer0 Nybegynder
15. juni 2008 - 16:02 Der er 3 kommentarer og
1 løsning

Sammenlign arrays fra MySQL

Jeg har et stort problem med at håndtere mine arrays, og bliver nu nødt til at søge hjælp.
I det følgende har brugeren brugernavnet $username og går på skolen $old_school. Brugeren skal nu se en liste over alle de kurser FRA $old_school som han IKKE allerede er tilmeldt. Kurserne skal sammenlignes vha. [courseid].

Værdierne hentes ind fra MySQL-tabellerne:
student_courses: [user, courseid]
webcal_user: [cal_login, ..., initials]
teacher: [cal_login, coursename, courseid]

Jeg har forsøgt mig med følgende:
<?php
$query1 = "SELECT * FROM webcal_user WHERE school = '$old_school'";
$result1 = mysql_query($query1) or die(mysql_error());
         
while ($rowschool = mysql_fetch_array($result1))
  {
  $query2 = "SELECT * FROM teachers WHERE cal_login = '$rowschool[cal_login]'";
  $result2 = mysql_query($query2) or die(mysql_error());
             
  while ($teacher = mysql_fetch_array($result2))
      {
    $query3 = "SELECT * FROM student_courses WHERE user = '$username'";
      $result3 = mysql_query($query3) or die(mysql_error());
                 
    while ($student = mysql_fetch_array($result3))
        {
        if($student[courseid] == $teacher[courseid])
            {}
        else
            {
            echo "Kursusid: " . $student[courseid] . ", Kursusnavn: " . $teacher[coursename] . ", Initialer: " . $rowschool[initials];
            }
        }
      }
  }
?>

Dette giver desværre et output hvor den viser hvert kursus printes 3-4 gange pga. det inderste while-loop som bare printer alle kurser som ikke mactcher betingelsen "==". Nogen forslag til hvordan man løser problemet?
Avatar billede dkfire Nybegynder
15. juni 2008 - 18:04 #1
Jeg ville nok kun kører en sql, noget ala:

SELECT w.initials, t.coursename, t.courseid FROM webcal_user w, teachers t, student_courses s WHERE w.cal_login = t.cal_login AND w.school = '$old_school' AND s.courseid <> t.courseid AND s.user = '$username'

Eller måske skal det løses med:

SELECT w.initials, t.coursename, t.courseid FROM webcal_user w, teachers t WHERE w.cal_login = t.cal_login AND w.school = '$old_school' AND  t.courseid NOT IN( SELECT s.courseid FROM student_courses s WHERE s.user = '$username' )
Avatar billede xzer0 Nybegynder
03. juli 2008 - 13:33 #2
Tusind tak for et meget brugbart svar!

Efter en del besvær har jeg fået det til at virke. Ovenstående er fuldstændig rigtigt bort set fra at notationen skal være KOLONNENAVN.TABELNAVN ...

Jeg er derfor endt med en MYSQL-kode som ser således ud:
SELECT initials, coursename, courseid FROM webcal_user, teachers WHERE webcal_user.cal_login = teachers.cal_login AND webcal_user.school = '$old_school' AND courseid NOT IN( SELECT courseid FROM student_courses WHERE user = '$username' );
Avatar billede xzer0 Nybegynder
03. juli 2008 - 13:35 #3
Kan jeg ikke give dkfire alle pointsne på en eller anden måde?
Avatar billede dkfire Nybegynder
03. juli 2008 - 21:56 #4
Jo ved at jeg laver et svar.

Men du har bestemt ikke ret, notationen skal være tabelnavn.feltnavn. Læg dog mærke til at jeg har givet dine tabeller et alias, så slap jeg for at skrive deres navne hele tiden.
Jeg kalder for eksempel teachers for t og kan derfor nøjes med t.cal_login, hvis jeg vil have feltet cal_login for den tabel.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester