order by und where? Bitte um Hilfe !

paulee

Erfahrenes Mitglied
Hallo!

Will bei meinem Adressbuch eine Sortierung nach dem Nachnamen haben.
Hier der Code ohne Sortierung:

PHP:
<?php 
	$verb = mysql_connect($ahost, $auser, $apasswort) or die("Fehler in Verbindung"); 
	$anweisung = "SELECT *
						FROM Adressbuch 
WHERE Nickname = '$usr' "; 
	if (mysql_select_db($adbname, $verb) ) {
	$ereg = mysql_query($anweisung, $verb) or die(mysql_error()); 
	if ($ereg) { 
	  while ($Row = mysql_fetch_assoc($ereg)) { 
	    echo "<table border='0' width='100%' id='table1' style='border-collapse: collapse'>
				<tr>
					<td width='20%'><font face='Tahoma' style='font-size: 8pt'>".$Row['Nachname'].",".$Row['Vorname']."</font></td>
					<td width='25%'><font face='Tahoma' style='font-size: 8pt'>".$Row['Mail']."</font></td>
					<td width='25%'><font face='Tahoma' style='font-size: 8pt'>".$Row['Telefon']."</font></td>
					<td width='23%'><font face='Tahoma' style='font-size: 8pt'>".$Row['Adresse']."</font></td>
					<td width='6%'><input type='checkbox' name='del[]' value='".$Row['Id']."'></td>
				</tr>
			</table>";
			
	  } 
	  } 

	else { 
			echo "fehler"; 
	} 
		} else { 
			echo "fehler2";
	}
?>


Hier der Code mit Sortierung:

PHP:
<?php 
	$verb = mysql_connect($ahost, $auser, $apasswort) or die("Fehler in Verbindung"); 
	$anweisung = "SELECT *
						FROM Adressbuch 
						ORDER BY Nachname
	                            WHERE Nickname = '$usr' "; 
	if (mysql_select_db($adbname, $verb) ) {
	$ereg = mysql_query($anweisung, $verb) or die(mysql_error()); 
	if ($ereg) { 
	  while ($Row = mysql_fetch_assoc($ereg)) { 
	    echo "<table border='0' width='100%' id='table1' style='border-collapse: collapse'>
				<tr>
					<td width='20%'><font face='Tahoma' style='font-size: 8pt'>".$Row['Nachname'].",".$Row['Vorname']."</font></td>
					<td width='25%'><font face='Tahoma' style='font-size: 8pt'>".$Row['Mail']."</font></td>
					<td width='25%'><font face='Tahoma' style='font-size: 8pt'>".$Row['Telefon']."</font></td>
					<td width='23%'><font face='Tahoma' style='font-size: 8pt'>".$Row['Adresse']."</font></td>
					<td width='6%'><input type='checkbox' name='del[]' value='".$Row['Id']."'></td>
				</tr>
			</table>";
			
	  } 
	  } 

	else { 
			echo "fehler"; 
	} 
		} else { 
			echo "fehler2";
	}
?>

Dann kommt aber immer folgender Fehler:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE Nickname = 'paul'' at line 4


Könnt Ihr mir weiterhelfen?
 
Mach mal ein Semikolon an das Ende der Anweisung.
Das sollte es gewesen sein.

Code:
    $anweisung = "SELECT * 
                        FROM Adressbuch 
                        ORDER BY Nachname 
                                WHERE Nickname = '$usr' ;";

Besser wäre auch wenn du die Variablen nicht mit in die Strings "reinschreibst"
PHP kann dann den String schneller ausführen. Macht bei kleinen Abfragen keinen richtigen Sinn aber ist halt eine etwas bessere Schreibweise.


Code:
    $anweisung = "SELECT * 
                        FROM Adressbuch 
                        ORDER BY Nachname 
                                WHERE Nickname = '".$usr."' ;";

MfG
 
ORDER BY kommt nach WHERE.
Erst wird selektiert, dann wird sortiert.
hondocrx hat gesagt.:
Besser wäre auch wenn du die Variablen nicht mit in die Strings "reinschreibst"
PHP kann dann den String schneller ausführen. Macht bei kleinen Abfragen keinen richtigen Sinn aber ist halt eine etwas bessere Schreibweise.
Code:
    $anweisung = "SELECT * 
                        FROM Adressbuch 
                        ORDER BY Nachname 
                                WHERE Nickname = '".$usr."' ;";
Solange Du weiterhin Anführungszeichen, statt Hochkomma nimmst, wird PHP den String trotzdem nach Variablen Parsen. Der wesentliche Vorteil ist IMHO die Übersicht, wenn man einen Editor mit Syntaxhighlighting hat:
PHP:
    $anweisung = "SELECT * 
                FROM Adressbuch 
                WHERE Nickname = '".$usr."' 
                ORDER BY Nachname";
Gruß hpvw
 
Zuletzt bearbeitet:
Hallo

Vielen dank Jetzt funktioniert alles wunderbar :-)

Habe es gestern noch mit dem Befehl GROUP BY probiert, allerdings
habe ich dann aus der Datenbank nur immer eine Person bekommen,
andere die den gleichen Nachnamen hatten, wurden nicht angezeigt.


Vielen dank! :-)))
 
paulee hat gesagt.:
Hallo

Habe es gestern noch mit dem Befehl GROUP BY probiert, allerdings
habe ich dann aus der Datenbank nur immer eine Person bekommen,
andere die den gleichen Nachnamen hatten, wurden nicht angezeigt.

und genau dazu ist "group by spalte" gedacht - alle gleichen Einträge in der spalte werden zu einer Gruppe zusammengefasst und nur einer wird angezeigt
und wenn ich schon dabei bin man kann nicht beeinflussen welcher Datensatz innerhalb der Gruppe ausgeben wird - es ist immer der erste Datensatz bei dem der Wert von spalte erstmals auftaucht
 
melmager hat gesagt.:
man kann nicht beeinflussen welcher Datensatz innerhalb der Gruppe ausgeben wird
Richtig

melmager hat gesagt.:
es ist immer der erste Datensatz bei dem der Wert von spalte erstmals auftaucht
Falsch, es ist immer irgendeiner aus der Gruppe.
Ich weiß nicht, ob der Datensatz bei wiederholten gleichen Abfragen reproduzierbar ist, aber es ist definitiv nicht immer der erste.

Gruß hpvw
 
Zurück