php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.08.2007, 10:23  
Neuer Benutzer
 
Registriert seit: 14.08.2007
Beiträge: 5
Gdriver
Standard Left Join funktioniert nicht richtig, nicht alle Werte....

HI,


Spalten der Tabelle arbeitstage (hier stehen die vorher eingetragenen Arbeitstage für welche sich die Mitarbeiter eintragen können):

arbeitstag_id
jahr_id
monat_id
tag_id

Inhalt ( - für Spalte):

1 - 1 - 3 - 14
2 - 1 - 3 - 15
3 - 1 - 3 - 16
4 - 1 - 3 - 17
5 - 1 - 3 - 18
6 - 1 - 3 - 19


Spalten der Tabelle mverf (hier wird abgelegt wann ein Mitarbeiter gerne arbeiten, aber noch nicht fest für diesen Tag und zu einer der beiden Schichten [ Früh (schichtart_id=1) und Spätschicht (schichtart_id=2)] eingeteilt ist):

persnr
arbeitstag_id
schichtart_id

Inhalt:

217 - 2 - 1
217 - 4 - 1


Für den ausgewählten Mitarbeiter (Variable $persnr) soll nun an den Tagen ein checked bei der Checkbox gesetzt werden, wo der Mitarbeiter sich schon eingetragen hat, damit man keine "Wunschzeiten" verliert bzw doppelt plant.


Nun zeigt er mir zwar die Tage an, an welchen der Mitarbeiter laut Tabelle mverf bereits geplant ist, aber alle weiteren möglichen Arbeitstage werden dem Mitarbeiter nicht mehr angezeigt. Er kann sich dann also an den Tagen auch nicht mehr eintragen.


Danke, habs wirklich lange versucht, komme aber gerade nicht dahinter wo der Fehler in meiner Abfrage steckt.


Edit:

"Wo ich hin möchte" :

Es gibt eine Seite, man wählt einen Mitarbeiter aus, dann ein Jahr und dann einen Monat. Dann sollen alle Arbeitstage angezeigt werden, welche in der Tabelle arbeitstage mit dieser Jahr_Id und mit dieser Monats_id hinterlegt sind. An diesen Arbeitstagen kann sich der Mitarbeiter mittels einer Checkbox an jedem Arbeitstag eintragen und dann per Button an die Datenbank senden und diese werden dann in die Tabelle mverf eingetragen. Nur falls der Mitarbeiter seine Zeiten für den Monat schon einmal eingetragen hat, er also zb. einen weiteren Tag für sich einplanen will und er auf die Seite geht, sollen ja die Checkboxen von den schon ausgewählten Tagen bereits angeharkt sein (Eben das "checked" bei der entsprechenden Checkbox).

Also kurzfassung, die Kreuzchen die der Mitarbeiter bereits für Arbeitstage gemacht sollen ihm angezeigt werden, falls der Mitarbeiter noch einmal auf die Seite "Wunscharbeitszeiten eintragen" geht.









Der Fehler ist nun mit meiner Abfrage, dass er nurnoch die Tage anzeigt, an welchen der Mitarbeiter eingetragen ist. Er kann sich also garnicht mehr für die anderen Tage eintragen.


Ich hoffe man kann verstehen was ich meine







HIer die Abfrage und Anzeige für die Frühschicht


PHP-Code:
<table border=0>
                <tr>
                    <td> <h3>Frühschicht</h3>
                    </td>
                </tr>
                </table>    
                <table border=1>
                
                <?php
                $result
=mysql_query("SELECT distinct tag_id as tag,tag_id, if (mverf.arbeitstag_id is NULL, '', ' checked')sel FROM arbeitstage left join mverf on arbeitstage.arbeitstag_id=mverf.arbeitstag_id where arbeitstage.jahr_id='1' and arbeitstage.monat_id='3' and mverf.schichtart_id='1' and mverf.persnr='217' order by tag;");
                
                        
                while (
$row mysql_fetch_array($result))
                                                {
                                                    
$tagef .= "<tr><td>".$row["tag"]."</td><td><input type='checkbox'  name='verff[]' value=".$row["tag_id"]." ".$row["sel"]."></td></tr>";
                                                    
                                                }
                                                
                                            echo 
$tagef;
            
            
                
?>
                
                </table>
[img][/img]
Gdriver ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.08.2007, 11:51  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Kannst du die Frage und das Problem etwas mehr zusammenfassen, ich blicke da nicht mehr durch, ich weiß garnicht was du vorhast.

Lass mal deine Vorlage weg und sag uns welche beiden Tabellen du gerne zusammenfügen willst und nach welcher Bedingung.

PS: Willkommen im Forum
Zergling-new ist offline  
Alt 14.08.2007, 12:25  
Neuer Benutzer
 
Registriert seit: 14.08.2007
Beiträge: 5
Gdriver
Standard

HI

Danke für den Hinweis .

Ich habs mal nochmal versucht unter "Wo ich hin möchte" zu beschreiben.

Ist etwas komisch beschreiben

Einfach fragen

Edit:

hab mal noch 4 Bilder rein gemacht um den Ablauf zu zeigen
Gdriver ist offline  
Alt 14.08.2007, 12:55  
Erfahrener Benutzer
 
Registriert seit: 14.01.2006
Beiträge: 111
moose
Standard

Ok, jetzt ist das ganze schon verständlicher

Tabelle mverf (mitarbeiter_verfügbar, schätz ich):
id| Mitarbeiter_id | Jahr | Monat | Tag
PHP-Code:
<?
/*Informationen abfragen*/
$sql "SELECT Jahr, Monat, Tag FROM mverf WHERE Mitarbeiter_id=123";
$result mysql_query($sql);
while(
$row =  mysql_fetch_assoc($result)){$a_mitarbeiter[] = $row;}
?>

<table border=1> 

<?
/*Tabelle für User erstellen*/
$jahr $a_mitarbeiter['Jahr'];
for(
$i=1;$i<=12;$i++){
    for(
$j=1;$j<=31;$j++){
        echo 
"<form method="POST"><tr><td>$j.$i.$jahr</td><td><input type="checkbox" name="Eingetragen" ";
        
?>
<input type="hidden" name="tag" value="<? echo $j;?>">
<input type="hidden" name="monat" value="<? echo $i;?>">
<input type="hidden" name="jahr" value="<? echo $jahr;?>">
<?
        $key 
= array("Jahr"=>$jahr"Monat"=>$i"Tag"=>$j);
        if(
array_search($key$a_mitarbeiter)!== FALSE){echo "checked></td><td><input type=\"submit\"></td></tr></form>";}
        else{echo 
"></td><td><input type=\"submit\"></td></tr></form>";}
    }
}
?>
</table>
Natürlich ist das ganze noch nicht fertig, aber es dürfte klar sein wie ichs machen würde

In die Tabelle kommen wirklich nur die einträge, wann jemand kann. alles andere wird mit php erstellt. left join wird gar nicht mehr benötigt

sollen sich mitarbeiter aus der datenbank auch wieder austragen können?
dann würde ich eine extra tabelle für schon bestätigte tage ausgeben lassen.

edit: aaaah, jetzt versteh ichs ganz^^ (mit bildern is es gleich viel schöner^^) ich werde heut abend vielleicht noch mal posten
__________________
http://www.martin-thoma.de
moose ist offline  
Alt 14.08.2007, 15:16  
Neuer Benutzer
 
Registriert seit: 14.08.2007
Beiträge: 5
Gdriver
Standard

Ja also Mitarbeiter sollen sich auch wieder austragen können.

Auf dem letzten Bild siehst du genau das Problem, links mit der Left Join Abfrage, wo er nur die Tage anzeigt, wo der Mitarbeiter eingetragen ist. Und rechts ist noch die alte Abfrage drin, wo Mitarbeiterunabhängig alle Tage angezeigt werden die dort verfügbar sind. Also ohne Abfrage ob der Mitarbeiter sich schon für die Tage eingetragen hat.

Da wurden dann einfach alle alten Einträge rausgeworfen und durch die neuen ersetzt. Aber das ist ja nix, deswegen versuch ichs nun besser zu machen, als ichs vor ein paar Wochen gemacht habe


Zu deinem Lösungsansatz, es gibt in der Tabelle mverf aber leider keine Jahr, Monat, Tag ID sondern nur die Arbeitstag ID und eben die Personalnummer und die Schichtar_ID

Ich kann die Tabellen auch erweitern, wenn es sein muss. Hab den ganzen Kram ja verbrochen

Hier mal was zb in der Tabelle arbeitstage steht



hier die Tabelle mverf:




Schonmal danke für deine Hilfe


Gruß

GDRIVER
Gdriver ist offline  
Alt 14.08.2007, 17:19  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

also für ein datumsfeld jahr,monat und tag extra spalten zu machen finde ich voll abgefahren.
__________________
Slava
http://bituniverse.com
Slava ist offline  
Alt 14.08.2007, 19:02  
Neuer Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 6
GunsnRoses
Standard

Nanana, maul mal hier nicht jeden gleich an! Du weißt ja nicht was er noch so damit vor hat...

Außerdem kennt nicht jeder immer den optimalen Weg. Wenn du meinst dass du ihn kennst dann schreib ein Tutorial dazu, zumal du auch zu viel Zeit zu haben scheinst

sry 4 offtopic
GunsnRoses ist offline  
Alt 14.08.2007, 19:25  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

Zitat:
Zitat von GunsnRoses
Nanana, maul mal hier nicht jeden gleich an! Du weißt ja nicht was er noch so damit vor hat...
nenne mir ein spezieler beispiel, wo man das wirklich braucht
Zitat:
Zitat von GunsnRoses
Außerdem kennt nicht jeder immer den optimalen Weg. Wenn du meinst dass du ihn kennst dann schreib ein Tutorial dazu, zumal du auch zu viel Zeit zu haben scheinst
sry 4 offtopic
Ich brauche kein Tutorial zu schreiben, da es schon genug Tutorials für SQL gibt.
Ausserdem beschreibt Mysql-Docu ziemlich gut datumsfunktionen wie Jear(),Month() und Day()..
Wegen meiner Freizeit hast du Recht.
Ich habe sogar die Zeit gefunden deine wertvolle Beiträge anzuschauen
http://www.phpfriend.de/forum/search...hor=GunsnRoses
__________________
Slava
http://bituniverse.com
Slava ist offline  
Alt 19.08.2007, 22:19  
Neuer Benutzer
 
Registriert seit: 14.08.2007
Beiträge: 5
Gdriver
Standard

Hi, nunja ich hatte dies mit Jahr Monat und Tag am Anfang reingebracht für die Anzeige, wo der Benutzer etwas auswählen kann. Das ganze Projekt war meine erste Programmiersache mit PHP. Und nachher konnte ich nicht noch einmal alles von neu schreiben.

Daher bitte ich drum mir das nach zu sehen. Ich habe leider noch immer keine Lösung für meine Abfrage gefunden

Logik ist da ganz einfach, aber das in der Abfrage hin zu bekommen
Gdriver ist offline  
Alt 20.08.2007, 15:56  
Neuer Benutzer
 
Registriert seit: 14.08.2007
Beiträge: 5
Gdriver
Standard

Habs nun doch hin bekommen

$tagl_req=mysql_query("select distinct arbeitstage.arbeitstag_id from arbeitstage left join mverf on mverf.arbeitstag_id=arbeitstage.arbeitstag_id and persnr='$persnr' where arbeitstage.jahr_id='$ajahr' and arbeitstage.monat_id= '$amonat' order by arbeitstag_id;");
Gdriver ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Apache funktioniert nicht richtig YYA Server, Hosting und Workstations 5 16.06.2008 15:24
Problem mit Inner join Jabi Datenbanken 15 09.05.2006 14:10
LEFT OUTER JOIN für mehr als 2 Tabellen ? Alpha Centauri Datenbanken 4 05.04.2006 16:18
Anzahl Bestellungen per LEFT JOIN dauert, dauert, dauert ... Datenbanken 13 06.02.2006 19:15
Select Problem Datenbanken 17 16.01.2006 21:54
[Erledigt] LEFT JOIN Query Bildung Datenbanken 6 04.11.2005 15:24
[Erledigt] LEFT JOIN funtkioniert nicht richtig Datenbanken 3 19.10.2005 17:38
LEFT JOIN auf ein Result einschränken Datenbanken 0 20.06.2005 16:39
[Erledigt] Definition 'Where' und 'Left Join' ??? Datenbanken 1 17.05.2005 18:10
[Erledigt] LEFT JOIN Problem Datenbanken 11 21.03.2005 16:36
geechoter button funktioniert nicht richtig Crypi HTML, Usability und Barrierefreiheit 10 29.12.2004 19:08
2 Werte aus 1 Tabelle mit JOIN? Datenbanken 5 19.08.2004 10:53
Werte werden nicht richtig abgespeichert! Boennchen PHP Tipps 2004 3 30.07.2004 11:10
[Erledigt] Mehrere COUNT(*) in einer Abfrage mit LEFT JOIN Datenbanken 8 18.06.2004 13:43
php funktioniert nicht richtig PHP Tipps 2004 3 14.06.2004 08:04

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
left join funktioniert nicht, doppelter left join funktioniert nicht korrekt, php in ein left join ein where noch rein, left join mehrere ergebnisse, left join alle ausgeben, left join alle werte ausgeben, join nicht alles, left join zeigt nicht alle werte an, \left join\ alles von ausgeben, sql tutorial left join

Alle Zeitangaben in WEZ +1. Es ist jetzt 20:06 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.