PHP/mysql: mehrere gleiche Einträge finden?

L

leo-magic

Aktives Mitglied
Thread Starter
Dabei seit
24.12.2004
Beiträge
1.178
Reaktionspunkte
4
Hallo,

Ich habe eine mySQL Datenbank mit Kontakten (Vornamen und Nachnamen)

Nun lasse ich mit einer while Schleife alle Vornamen anzeigen.
Bei zweimal vorkommenden Vornamen sollte es aber zusätzlich noch den ersten Buchstaben des Nachnamen anzeigen.

Wie lässt sich das realisieren?

PHP:
if ($vorname == "Max")
{
$anzeige = $vorname.' '.substr($nachname, 0, 1).'.';
}
So funktionierts für Einträge mit "vornamen=Max". Geht das irgendwie, ohne die Namen zu definieren, also automatisch bei den Einträgen, die min. 2 mal vorkommen?

Danke!
Léo
 
Hi,
ich würde es direkt in die MySql-Anfrage einbauen:
- mit Count Anzahl der Vorkommen der Vornamen in der Tabelle berechnen
- anschließend mit IF die Fallunterscheidung
- mit Concat und Substring Vor- und Nachname zusammenfügen

Gruß
 
Hallo!

Danke für die Antwort. Habe es mal so probiert:

PHP:
$sql = "SELECT customers_id, customers_firstname, customers_lastname, COUNT(customers_lastname)
FROM customers GROUP BY customers_firstname ORDER BY customers_firstname ASC";

$query = mysql_query($sql);

while ($row = mysql_fetch_array($query))
{

if ($row['COUNT(customers_lastname)'] >= "2")
{
$vorname = $row['customers_firstname'].' '.substr($row['customers_lastname'], 0, 1).'.';
}
else
{
$vorname = $row['customers_firstname'];
}

Was passiert: Es wird logischerweise nur noch eine Person ausgegeben, wenn es eine zweite mit gleichen Vornamen gibt. Dafür steht aber korrekt der 1. Buchstaben des Nachnamen bei diesen zweimal vorkommenden Personen.

Wie kann ich das umgehen?

Danke,
Léo
 
Hi,
1. Subquery: Wie dein $sql, du kannst allerdings customers_lastname aus dem Select entfernen und Order By kann auch gestrichen werden.

Füge dann die 1.Subquery mit customers über den Vornamen zusammen.
Dann sollte es eigentlich klappen ;-)

Gruß
 
Ui, jetzt bin ich etwas überfordert... Wie sol das gehen?

Danke für Deine Hilfe... :cake:
 
Code:
SELECT 
IF(count>=2,concat(vorname," ",SUBSTRING(nachname,1,1)), vorname) as output 
FROM 
(SELECT  COUNT(vorname) as count ,vorname  FROM test GROUP BY vorname) a  
JOIN 
(SELECT vorname , nachname from test) b USING(vorname)
So sollte dir MySQL direkt die richtige Ausgabe berechnen ...
 
Hmm, komme damit nicht wirklich klar. Zum Teil ist meine SQL Abfrage etwas komplizierter (verschiedene Daten aus verschiedenen Tabellen, etc.)...

Ist es nicht möglich, die SQL-Abfrage und die Überprüfung, ob es mehrere gleiche Namen hat, zu trennen?
Wäre um einiges einfacher bei den vielen verschiedenen SQL Abfragen die ich habe...

Danke,
Léo
 
Zurück
Oben Unten