MySQL gibt nicht den ersten Eintrag zurück
matthias
- datenbank
0 wahsaga
Hallo Leute,
ich kapiers einfach nicht - und wahrscheinlich ist es ganz einfach...
Ich versuche via while Datensätze aus der Datenbank zu lesen. Wunderbar - nur lässt er den ersten Datensatz aus.
$ptypes=array("standartpersonal", "fremdpersonal", "zusatzpersonal");
$p=array();
for($i=0; $i<count($ptypes); $i++) {
$mysql_query="SELECT * FROM produktionpersonal WHERE id_produktion = ".$_SESSION["m"]["produktion"]["id_produktion"]." AND typ = '".$ptypes[$i]."'";
$mysql_ressource = mysql_query($mysql_query) or die(mysql_error());
$data_result = mysql_fetch_array($mysql_ressource, MYSQL_ASSOC);
if($data_result["id_produktionpersonal"]) {
$p[$ptypes[$i]]=array();
$data=array();
while ($data_result = mysql_fetch_array($mysql_ressource, MYSQL_ASSOC)) {
$data=array();
$data["ppid"]=$data_result["id_preisgruppepersonal"];
$data["name_text"]=getFieldById("personal",
$data_result["id_personal"], "vorname")." ".getFieldById("personal", $data_result["id_personal"], "name");
$data["name_id"]=$data_result["id_personal"];
$data["preis"]=$data_result["preis"];
echo implode($data)."<br>";
array_push($p[$ptypes[$i]], $data);
} // while
}//if
} // for i
Die Datenbank sieht so aus:
produktionpersonal
produktionpersonal
(id\_produktionpersonal
int(11) NOT NULL auto_increment,timestamp
int(11) NOT NULL,id\_personal
int(11) NOT NULL,id\_preisgruppepersonal
int(11) NOT NULL,id\_produktion
int(11) NOT NULL,typ
text collate latin1_general_ci NOT NULL,preis
text collate latin1_general_ci NOT NULL,id\_editor
int(11) NOT NULL,id\_produktionpersonal
)produktionpersonal
produktionpersonal
VALUES (1, 1162200563, 6, 1, 487, 'standartpersonal', '1.250,00', 0);produktionpersonal
VALUES (2, 1162200563, 5, 2, 487, 'standartpersonal', '300,18', 0);produktionpersonal
VALUES (3, 1162200563, 4, 7, 487, 'standartpersonal', '300,00', 0);produktionpersonal
VALUES (4, 1162200563, 2, 5, 487, 'standartpersonal', '1.100,37', 0);produktionpersonal
VALUES (5, 1162200563, 9, 5, 487, 'standartpersonal', '1.100,37', 0);hi,
Ich versuche via while Datensätze aus der Datenbank zu lesen. Wunderbar - nur lässt er den ersten Datensatz aus.
Nein.
Aber _du_ liest den ersten Datensatz bereits vor deiner Schleife aus - und verwirfst seinen Inhalt dann.
$data_result = mysql_fetch_array($mysql_ressource, MYSQL_ASSOC);
Das machst du vor der Schleife.
if($data_result["id_produktionpersonal"]) {
Was bezweckst du mit dieser Abfrage?
Falls du wissen möchtest, ob deine Abfrage überhaupt Ergebnisse gebracht hat, nutze mysql_num_rows().
while ($data_result = mysql_fetch_array($mysql_ressource, MYSQL_ASSOC)) {
Hier liest du den nächsten Datensatz in $data_result ein, überschreibst damit den vorherigen, ohne mit dessen Inhalt irgendetwas sinnvolles angefangen zu haben.
gruß,
wahsaga
$data_result = mysql_fetch_array($mysql_ressource, MYSQL_ASSOC);
Das machst du vor der Schleife.
ja - weil ich wissen möchte, ob es sich überhaupt lohnt loszulegen. dazu frage ich einfach ob, überhaupt ein datensatz vorhanden ist.
if($data_result["id_produktionpersonal"]) {
Was bezweckst du mit dieser Abfrage?
s.o.
dennoch gracias. na klar! ich habe jetzt eben jetzt diese abfrage:
$numrows=mysql_num_rows($mysql_ressource);
if($numrows>0) {...
gracias
Matthias
Ich bin was Rechtschreibung angeht nicht pingelig, aber:
Es heißt Standard, es gibt zwar eine Standarte aber ob du mit dem Begriff 'standartpersonal', Fahnenträger meinst bezweifle ich doch.
Struppi.