zwangseinweisung
Goto Top

SQL-Abfrage und leere Felder vermeiden

Hallo,

ich mache grade eine Ausbildung zum Fi-Si und vor dem Weihnachtsurlaub haben wir im Fach Datenbanken noch eine Aufgabe bekommen die wir lösen sollen. Nun renn ich aber die ganze Zeit mit dem Kopf vor die Wand und finde keine Lösung. Aufgabe ist: Wir haben eine Tabelle in der Vor und Nachnamen stehen. Jetzt sollen wir zufällige Namen generieren lassen aber die Spalten sind ungleichmäßig. Es sind mehr Vor als Nachname in der Tabelle. Wenn ich jetzt eine abfrage mache:

Select * from names ORDER by RAND() LIMIT 200;

kommt dann sowas z.b. raus:

Ortfried Göring
Holle Mittelstädt
Gundela Mair
Wald
Annelene Johannsen
Eva-Maria Lackner
Volkhardt Henschel
Mathias Geißler
Weck
Wrede
Hannelore März
Sighilde Schreiner

Wie verhindere ich das sowas passiert wie Wald, Weck oder Wrede?

vielen, lieben dank

Content-Key: 324849

Url: https://administrator.de/contentid/324849

Printed on: April 26, 2024 at 05:04 o'clock

Mitglied: 131381
131381 Dec 25, 2016 updated at 17:50:21 (UTC)
Goto Top
Mit where ?
Select * from names WHERE Vorname IS NOT NULL AND Nachname IS NOT NULL ORDER by RAND() LIMIT 200;
Gruß mik

zwangseinweisung
War dein Weihnachten echt so schlimm face-smile?
Member: wiesi200
wiesi200 Dec 25, 2016 at 17:45:22 (UTC)
Goto Top
Hallo,

was hast du denn schon versucht?

Vor- und Nachnamen hast du ja sicher in separaten Spalten.

Wie wär noch die Bedingung "Vorname is not Null or Nachname is not Null"

Wie das dann genau aussehen musst kannst du selber versuchen zusammen zu setzten.
Member: zwangseinweisung
zwangseinweisung Dec 25, 2016 at 18:04:46 (UTC)
Goto Top
Grummel, irgendwo drauf geklickt und jetzt ists als "gelöst" markiert.

Die Tabelle sieht so aus:

+----------------------------+
| Vorname      | Nachname    |
+--------------+-------------+
| Alex         | Sagichnicht |
| Bernd        | Geheim      |
|              | Nope        |
+--------------+-------------+

Mit dem

Select * from names WHERE Vorname IS NOT NULL AND Nachname IS NOT NULL ORDER by RAND() LIMIT 200;

von oben habe ich das selbe Ergebnis. Es werden immer noch Nachnamen ohne Vornamen angezeigt.
Member: zwangseinweisung
zwangseinweisung Dec 25, 2016 updated at 18:06:12 (UTC)
Goto Top
zwangseinweisung ist aus dem Suff heraus entstanden :D
Member: wiesi200
wiesi200 Dec 25, 2016 updated at 18:26:24 (UTC)
Goto Top
Mach aus dem and ein or
Bei and darf im Datensatz weder ein Vor- noch Nachname stehen. Somit werden nur kpl. leere Datensätze rausgefiltert.

Edit: wie weit bist du eigentlich mit der Ausbildung?
Member: zwangseinweisung
zwangseinweisung Dec 25, 2016 at 19:15:10 (UTC)
Goto Top
Hm.... also.... ich bin zu blöd.... wenn ich das "AND" in "OR" ändere bekomme ich immer noch das selbe Ergebnis. Einige Namen tauchen immer noch ohne Vornamen auf. Keine Ahnung was ich schon alles probiert habe. von "select blah as blub" bis hin zu joins.

Die Ausbildung ist nächsten Sommer zuende
Member: wiesi200
Solution wiesi200 Dec 25, 2016 at 19:41:44 (UTC)
Goto Top
versuch mal
WHERE `Vorname` <>'' and `Nachname`<>''   
Member: AndreasHoster
AndreasHoster Dec 25, 2016 at 20:00:07 (UTC)
Goto Top
Du weist was das * beim Select bedeutet?
Deine obere Select Anweisung listet nur VORHANDENE Vornamen / Nachnamen Kombinationen in zufälliger Reihenfolge auf.
Aber Du solltest doch zufällige Vornamen / Nachnamenkombinationen erzeugen, oder?

Also Vornamen und Nachnamen einzeln holen (und leere rausfiltern) und dann kombinieren.
Member: zwangseinweisung
zwangseinweisung Dec 25, 2016 at 20:52:54 (UTC)
Goto Top
schon, "select *" zieht alles aber ich nutze ja "rand()" in der abfrage was die Ergebnisse durcheinander würfelt (auch recht gut sogar)
Member: zwangseinweisung
zwangseinweisung Dec 25, 2016 at 20:56:47 (UTC)
Goto Top
Großartig! Es funktioniert, Das war es! "<>" kannte ich noch nicht. Wo gibts Docs dazu?

Also hier die ganze Abfrage:

Select * from names WHERE `vorname` <>'' and `nachname`<>'' ORDER by RAND() LIMIT 250  
Member: wiesi200
wiesi200 Dec 25, 2016 at 21:13:57 (UTC)
Goto Top
Er hat aber recht, es werden nur die einzelnen DB Einträge zufällig durcheinander gewürfelt und nicht zufällige Namenskombinationen erschaffen.
Hier musst du mit Namen Vornamen und Nachnamen separat abfragen. Und dann zusammensetzen.
Member: wiesi200
wiesi200 Dec 25, 2016 at 21:18:32 (UTC)
Goto Top