(MySQL) Wenn 2 gleiche Werte, nur eine Ausgabe ?

Ahmedo

Grünschnabel
Guten Abend, ich hätte da eine Frage :)
Ich will in MySQL folgendes ausgeben:
Wenn es in der Spalte "title" bereits zB. dort schon den Titel "Hallo" gibt, kann es durchaus noch weitere Titel mit "Hallo" geben, aber ich will, dass dann nur einer von beiden ausgegeben wird, wie realisiere ich das ? (mit PHP).
Und wie wähle ich aus, welches dann angezeigt wird und welches nicht ? Gibt es überhaupt so eine Funktion ?

Ich bedanke mich im Voraus :)
 
Ich verstehe die Frage nicht ganz.
Misnt du sowas wie ien DISTINCT um die Abfrage eindeutig zu machen?
 
Also wenn zufällig einer der vorhandenen Titel ausgegeben werden soll, kannst du es mit dieser Abfrage machen:

SQL:
SELECT
    feld1, feld2, feld3
FROM
    tabelle
WHERE
    title = 'Hallo'
ORDER BY RAND()
LIMIT 1

Damit werden die vorhandenenen Einträge zufällig sortiert und nur einer davon ausgegeben.
 
Zuletzt bearbeitet:
Fast, aber leider noch nicht ganz...
Ich erklär das nochmal besser bzw. versuch es besser zu erklären.
Also:
Ich habe mit einer Schleife (foreach) alle Titel ausgeben lassen. Wenn es nun 2 Einträge mit dem selben Titel gibt, soll nur einer von beiden angezeigt werden.

Der folgende Code würde (glaube ich) nicht funktionieren, weil 1. der Titel ja nicht immer nur "Hallo" ist (ich weiß, ich habs leider am Anfang doof erklärt) und 2. bei der Foreach-Schleife dann allgemein nur eins angezeigt wird, oder ?

SQL:
SELECT
    feld1, feld2, feld3
FROM
    tabelle
WHERE
    title = 'Hallo'
ORDER BY RAND()
LIMIT 1

PS: So sieht mein PHP Code aus (Foreach-Schleife)

PHP:
 $ergebnis = $db->get( $prefix."artikel" );
 foreach( $ergebnis as $row )
 
Zuletzt bearbeitet:
Okay, nun bin ich auf jeden Fall einen Schritt näher gekommen, jetzt wird nur ein Titel angezeigt, was auch genau richtig so ist.
Nun, ich will aber mehrere Spalten abfragen und dabei nur die Spalte "title" im Distinct haben.
Also das nun erschienende Problem ist folgendermaßen:
Wenn ich den Code nutze:
PHP:
$abfrage = "SELECT DISTINCT * FROM artikel";
Dann erscheint alles ganz normal, also da werden alle Titel angezeigt (also auch gleiche), was ich ja nicht will.
Beim folgenden Code:
PHP:
$abfrage = "SELECT DISTINCT title FROM artikel";
Wird es eigentlich nun so angezeigt, wie ich es haben will. Naja fast. Nun erscheint halt der Titel auch wirklich nur einmal, ABER:
Z.B. die Spalte "desc" (für Description, also Beschreibung) erscheint nun nicht. Da steht zwar jetzt der Titel des Artikels nur einmal, aber die Beschreibung wird nicht angezeigt, oder der Verfasser (die Spalte autor) wird nun nicht angezeigt.

Was ich nun will: Ich will einfach, dass der Titel nur einmal erscheint, wobei aber auch z.B. die Beschreibung dabei ist oder der Autor bzw. den Verfasser,
 
Und was passiert wenn du GROUP BY nimmst.

SQL:
SELECT autor, description, title FROM artikel GROUP BY titel

"desc" als Feldname würde ich nicht nehmen da dies eib Parameter zum Sortieren ist!
 
Zuletzt bearbeitet:
tombe, du soltest dich schämen ein solches SQL zu veröffentlichen.

Das ist eine Ausnutzung einer unschönen Eigenschaft von MySQL. Man sollte sie sich aber nbicht angwöhnen, da sie in fast allen anderen DBMS so nicht funktioniert.
In MySQL muss nicht jedes Feld in den GROUP BY Teil oder mit einer Gruppierungsfunktion gehandelt werden. In den anderen DBMS schon.
Ergo müsste dein SQL so aussehen (oder anderst gesagt, MySQL mach das daraus):
SQL:
SELECT autor, description, title 
FROM artikel 
GROUP BY autor, description, title

Und das ist identisch mit
SQL:
SELECT DISTINCT autor, description, title 
FROM artikel

Das Problem bei Ahmedos erstem Distinct-Versuch war, dass er auf * prüfte und nicht auf eine Feldauswahl.
 
Zuletzt bearbeitet von einem Moderator:
Ich wüßte nicht warum ich mich schämen soll nur weil ich die Möglichkeiten nutze die DIESES System bietet.

MySQL bietet auch an anderer Stelle Möglichkeiten und Funktionen die ein anderes DBMS so nicht kennt oder eben anders löst. Soll ich sie deshalb alle nicht verwenden?

Du lieferst sicher zumindest fast immer tolle Lösungsvorschläge und du kennst dich sicher auch mehr als gut in zumindest den Bereichen PHP, MySQL aus. Aber einen solchen Kommentar zum Vorschlag eines anderen. Na ja.
 

Neue Beiträge

Zurück