php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.06.2011, 21:18  
Neuer Benutzer
 
Registriert seit: 08.12.2010
Beiträge: 28
PHP-Kenntnisse:
Anfänger
hruendel ist zur Zeit noch ein unbeschriebenes Blatt
Standard Select mit id, name - Option (name) soll nur einmal vorkommen.

Wie lautet die MySQL Abfrage wenn für eine Select-Liste die Optionen nur einmal vorkommen sollen?

Die Liste sieht in etwa so aus. Möchte Auswahlmenu für Anreden die bereits in den Benutzertabellen in der Datenbank vorhanden sind nutzen.

Dabei sollen die anreden nicht doppelt vorkommen.

Man könnte es mit DISTRICT machen, jedoch benötige ich auch das id, dass dann als value ausgegeben wird.

Code:
<select>
	<option value="1">Herr</option>
	<option value="3">Frau</option>
	<option value="27">Fa.</option>
	<option value="44">Herr</option>
	<option value="45">Herr</option>
</select>
Benutze bisher den Code:
Code:
	SELECT id, greeting
	FROM `user`
	WHERE greeting != ''
	LIMIT 50
hruendel ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 10.06.2011, 21:52  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

http://dev.mysql.com/doc/refman/5.1/...ct.html#c11663
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 10.06.2011, 22:00  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Warum sind die Anreden bei dir doppelt belegt?
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 10.06.2011, 22:15  
Neuer Benutzer
 
Registriert seit: 08.12.2010
Beiträge: 28
PHP-Kenntnisse:
Anfänger
hruendel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Habe folgendes gemacht, gleiches Ergebnis - Einträge mehrfach vorhanden:
Code:
		SELECT distinct (concat($row, id)), $row, id
		FROM `#__$table`
		WHERE $row != ''
		LIMIT 50
Zitat:
Zitat von lstegelitz Beitrag anzeigen
Warum sind die Anreden bei dir doppelt belegt?
Gute Frage! Solche Fragen liebe ich...

Ich schmeiße die Anreden aus der Tabelle raus und verwende eine getrennte Tabelle dafür. Ist zwar nicht die Lösung des Threads jedoch mein Problem ist nun geregelt.
hruendel ist offline   Mit Zitat antworten
Alt 10.06.2011, 22:29  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Ist zwar nicht die Lösung des Threads
Weil der Thread auch keinen Sinn macht. Wieso sollte man als Value die ID des Datensatzes angeben, wenn die option gar nicht den Datensatz benennt?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 10.06.2011, 23:10  
Neuer Benutzer
 
Registriert seit: 08.12.2010
Beiträge: 28
PHP-Kenntnisse:
Anfänger
hruendel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Weil der Thread auch keinen Sinn macht. Wieso sollte man als Value die ID des Datensatzes angeben, wenn die option gar nicht den Datensatz benennt?
Doch, das tut sie. Value ist hier das ID und $row ist die Anrede:
Code:
<select ... >
	<option value="1">Herr</option>
</select>
Es ist halt ein Teil des multifunktionellen Listengenerators den ich als Klasse benutze.
Die Lösung wird noch gesucht. Die Anrede in eine Extratabelle zu packen ist aus diversen Gründen doch nicht so wirklich praktisch. Ist halt so eine spezielle Lösung.

Geändert von hruendel (10.06.2011 um 23:14 Uhr).
hruendel ist offline   Mit Zitat antworten
Alt 10.06.2011, 23:47  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Nein, das tut sie nicht. Du liest ID und Anrede aus einer Tabelle 'user', die mit Sicherheit irgendwann einmal mehr als einen "Herr" haben wird... deswegen sind bei dir auch die Anreden mehrfach belegt, jeweils mit anderer ID.

Wenn du die Anrede nicht in einer eigenen Tabelle haben willst, dann benutz die Anrede ("Herr") sowohl im value, als auch zur Anzeige:
Code:
<option value="Herr">Herr</option>
, dann kannst du auch mit DISTINCT arbeiten.

Das andere macht keinen Sinn, wie du ja eingangs bereits gesehen hast.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 11.06.2011, 01:51  
Neuer Benutzer
 
Registriert seit: 08.12.2010
Beiträge: 28
PHP-Kenntnisse:
Anfänger
hruendel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von lstegelitz Beitrag anzeigen
Nein, das tut sie nicht. Du liest ID und Anrede aus einer Tabelle 'user', die mit Sicherheit irgendwann einmal mehr als einen "Herr" haben wird... deswegen sind bei dir auch die Anreden mehrfach belegt, jeweils mit anderer ID.

Wenn du die Anrede nicht in einer eigenen Tabelle haben willst, dann benutz die Anrede ("Herr") sowohl im value, als auch zur Anzeige:
Code:
<option value="Herr">Herr</option>
, dann kannst du auch mit DISTINCT arbeiten.

Das andere macht keinen Sinn, wie du ja eingangs bereits gesehen hast.
Leider (... oder zum Glück) muss ich mit ID und Anrede arbeiten. Und es ist richtig gemerkt, dass zum Beispiel die Anrede "Herr" mehrmals mit unterschiedlichen IDs gibt.

An ID, Option, und anderen Bestandteilen wird sich wohl nichts ändern da über den Listengenerator noch ca. 30-50 weitere Abfragen als Anrede erfolgen.

Diese Funktion soll nur die Eingabe erleichtern, beim Klick auf die Richtige Anrede wird per Java ein anders Feld gefüllt. Es sollen halt nicht 350 gleiche Werte in die Option geschrieben werden.

Die Hauptfrage ist und bleibt - wie erstelle ich eine MySQL Abfrage die bei Vorkommen einen Wertes ihn nur ein Mal aufführt. Die Schwierigkeit ist auch, die dazugehörige ID soll mit ausgegeben werden.

Ich werde probieren den PHP Code des Listengenerators zu ändern. Schreibe einfach eine andere Funktion.
hruendel ist offline   Mit Zitat antworten
Alt 11.06.2011, 02:09  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
dass zum Beispiel die Anrede "Herr" mehrmals mit unterschiedlichen IDs gibt.
Nein ist es nicht. Wie Du es drehst und wendest - wenn die Anrede mehrfach vorkommt, gehört die ID nicht zur Anrede, sondern allenfalls zum gesamten Datensatz. Sonst verstößt Deine Tabelle gegen die Normalform.

ID kommt von Identität, also der Austauschbarkeit zweier Daten. http://de.wikipedia.org/wiki/Identit...8Mathematik%29 Ein Wert, der durch 1 wie auch durch 52 repräsentiert werden kann, kann mit diese Zahlen nicht identifiziert werden. Denn sonst musst Du Dich fragen, welcher Wert aus der Select-Auswahl für „Herr“ denn nun der richtige ist.

Entweder auslagern oder bspw. ENUM als Typ benutzen und die Anrede selbst als option value, wie oben gezeigt wurde. Wenn Du die Anrede mehrfach bekommst, musst Du Dir die Frage stellen, warum Du so viele Daten ausliest (z.B., weil Du weitere Felder der Datensätze anderweitig verarbeitest)...
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 11.06.2011, 21:51  
Erfahrener Benutzer
 
Registriert seit: 22.07.2004
Beiträge: 226
DirkHo befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

auch wenn die Lösung sicher schwachsinn ist, aber so wie ich es verstehe schreibt er die ID die im Dropdown gewählt wird dann nicht in die Tabelle sondern startet erneut eine Abfrage auf die DB, zieht sich die Anrede die als String in dem Datensatz steht und schreibt diese dann als Text in ein Tabellenfeld oder was auch immer.

Mache über DISTINCT (dazu wurde dir die Lösung auch schon gepostet!!!! oder GROUPED BY) eine Abfrage auf die Tabelle, als value kannst du dann genauso Herr, Frau,.. nehmen.

Dann hast du quasi so einen Quelltext:

PHP-Code:
echo '<select ...>';
while(...) {
echo 
'<option value="' $row['anrede'] . '">' $row['anrede'] . '</option>';
}
echo 
'</select>'
Code:
<select ...>
<option value="Herr">Herr</option>
<option value="Frau">Frau</option>
...
</select>
Besser ist es allerdings, wenn du eine Tabelle ANREDE machst deren Primärschlüssel in der anderen Tabelle als ANREDE_ID verwendet wird. Dann kannst du auch die Dropdown-Box einfacher erstellen. Es geht ja auch nicht nur darum ein SELECT-Statement zu erstellen. Falls da mal 1.000.000 Datensätze drin sein sollten wäre es ja auch eine Performancefrage. Die Tabelle ANREDE würde sich vom Umfang allerdings nie ändern, sondern immer nur Herr, Frau,... beinhalten.

Viele Grüße,

Dirk
DirkHo ist offline   Mit Zitat antworten
Antwort


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
Sound per HDMI ausgeben [Debian Squeeze + onBoard ATI] dreamcatcher Off-Topic Diskussionen 0 30.05.2011 11:44
SELECT in SELECT oder elegantere Lösung möglich? sunny Datenbanken 12 03.05.2011 16:32
[Erledigt] Union Select im Insert Befehl Dark Guardian Datenbanken 2 10.12.2009 16:35
Array umwandeln von zwei zu mehrdimensional erselbst PHP Tipps 2009 6 02.04.2009 23:30
[Erledigt] Kein Ergebnis bei SELECT (MySQL 4.1.9) dr.e. Datenbanken 4 15.06.2008 19:54
Select / Option Feld mit CSS nachbauen ? andrew22 HTML, Usability und Barrierefreiheit 2 30.11.2006 16:06
Parsen von Delimitern Basti Tutorials 0 30.09.2006 21:24
[JavaScript] Event Handler in form select - Syntax? winfo_cologne HTML, Usability und Barrierefreiheit 5 29.03.2006 16:47
Hilfe beim zufügen von option zu select seven-12 PHP Tipps 2007 10 17.11.2005 17:05
[Erledigt] Dynamischer Bildwechsel mit einer Select option HTML, Usability und Barrierefreiheit 1 27.10.2005 14:46
[Erledigt] Dynamischer Bildwechsel mit einer Select option HTML, Usability und Barrierefreiheit 0 27.10.2005 14:27
Ausgabe in Select option m-elssner PHP Tipps 2005-2 1 20.09.2005 19:47
Option bei select mit PHP als Selected seven-12 PHP Tipps 2005-2 9 08.08.2005 17:19
Select Option Frage PHP Tipps 2005-2 3 26.06.2005 11:30
[Erledigt] 2 mal select 1 form PHP-Fortgeschrittene 1 01.09.2004 20:13

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
select option name, select nur einmal ausgeben, select id name, <select id=\\ name=\\>, users darf nur einmal vorkommen php, php select option name, datensatz darf nur einmal vorkommen, mysql id nur einmal ausgeben, select inhalte nur einmal vorkommen, php namen nur einmal anzeigen, php mysql select where nur 1x vorhanden, mysql select nur ein vorkommen, php option selected value nur einmal, php sehr viele optionen im select, select options verwenden, werte sollen in mysql abfrage immer nur einmal vorkommen, mysql select id nur einmal vorhanden, mysql datenfeld darf nur einmal vorkommen, mysql list mindestens einmal vorkommen, html select options auslagern

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:04 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