php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 26-04-2010, 12:06
Rollimen
 Registrierter Benutzer
Links : Onlinestatus : Rollimen ist offline
Registriert seit: Apr 2010
Beiträge: 10
Rollimen befindet sich auf einem aufstrebenden Ast
Standard Problem bei der Sortierung der Ausgabe der Daten

Hallo an alle

Das ganze Wochende habe ich das Forum als Gast durstöbert aber leider keine Lösung für mein Problem gefunden. Ich hoffe dass mir jemand helfen kann.

Ich habe eine Datenbank für rollstuhlgerechte Angebote mit folgender Struktur:

`id` int(11) NOT NULL auto_increment,
`kat_id` varchar(10) NOT NULL default '',
`bezeichnung` varchar(200) NOT NULL default '',
`name` varchar(250) NOT NULL default '',
`adresse` varchar(250) NOT NULL default '',
`plz` varchar(4) NOT NULL default '',
`ort` varchar(200) NOT NULL default '',
`tel` varchar(50) NOT NULL default '',
`fax` varchar(50) NOT NULL default '',
`email` varchar(100) NOT NULL default '',
`web` varchar(100) NOT NULL default '',
`info` text NOT NULL,
`suchbegriffe` text NOT NULL,
`parken` char(1) NOT NULL default '',
`parken_info` varchar(100) NOT NULL default '',
`zugang` char(1) NOT NULL default '',
`zugang_info` varchar(100) NOT NULL default '',
`wc` char(1) NOT NULL default '',
`wc_info` varchar(100) NOT NULL default '',
`tische` char(1) NOT NULL default '',
`tische_info` varchar(100) NOT NULL default '',
`bad` char(1) NOT NULL default '',
`bad_info` varchar(100) NOT NULL default '',
`pool` char(1) NOT NULL default '',
`pool_info` varchar(100) NOT NULL default '',
`strand` char(1) NOT NULL default '',
`strand_info` varchar(100) NOT NULL default '',
`see` char(1) NOT NULL default '',
`see_info` varchar(100) NOT NULL default '',
`datum` varchar(10) NOT NULL default '',
`klicks` varchar(250) NOT NULL default '',
`geprueft` char(1) NOT NULL default '',
`online` char(1) NOT NULL default '',
`pass` varchar(50) NOT NULL default '',
`aktiv` char(1) NOT NULL default '',

die Felder parken,zugang,wc,tische,bad,pool,strand und see werden beim Eintragen mit 0,1 oder 2 gefüllt.

0 steht für nicht rollstuhlgerecht
1 steht für rollstuhlgerecht
2 steht für nicht vorhanden

Die Ausgabe der Einträge habe ich so gemacht:

$abfrage = "SELECT * FROM eintraege WHERE kat_id='$rubrik' ORDER BY geprueft DESC, klicks DESC";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
$id=$row->id;
$bezeichnung=$row->bezeichnung;
.......


Das funktioniert auch aber ich muss auch die oben genannten Felder bzw. deren Inhalt berücksichtigen.
Es sollen also die Einträge mit den meisten 1 am Anfang stehen dann die mit 2 und dann erst die mit 0

Ich hoffe ich habe mich halbwegs verständlich ausgedrückt und ihr versteht mein Problem.

Gruß und vielen Dank im voraus
Rollimen
Mit Zitat antworten
  #2 (permalink)  
Alt 26-04-2010, 12:14
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Sortiere zusätzlich nach der Summe dieser Felder.

SELECT ... ORDER BY ..., (parken + zugang + wc + tische + bad + pool + strand + see) DESC

oder

SELECT ..., (parken + zugang + wc + tische + bad + pool + strand + see) AS score ... ORDER BY ..., score DESC


Edit: Jetzt sehe ich erst, dass du Datensätze mit vielen Einsen vor denen mit vielen Zweien haben willst. Dann klappt das mit dem Summieren nicht.
Kannst du die Bedeutung von Einsen und Zweien austauschen? Es leuchtet nämlich nicht ein, warum Einsen besser sind als Zweien und Zweien besser als Nullen.

Geändert von onemorenerd (26-04-2010 um 12:17 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 26-04-2010, 12:28
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Und mir leuchtet nicht ein, warum kat_ids, einsen, nullen und zweien keine Zahlen sind. Warum verwendest du als "nicht vorhanden" kein NULL? Denn NULL kennzeichnet exakt das nichtvorhandensein eines Wertes.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #4 (permalink)  
Alt 26-04-2010, 12:38
Rollimen
 Registrierter Benutzer
Links : Onlinestatus : Rollimen ist offline
Registriert seit: Apr 2010
Beiträge: 10
Rollimen befindet sich auf einem aufstrebenden Ast
Standard

Hmm, ja, klar, ich versteh im Moment kein Wort aber egal.

Folgendes noch zur Erklärung

Priorität bei der Sortierung - vorhanden und rollstuhlgerecht, nicht vorhanden und vorhanden aber nicht rollstuhlgerecht.

@ combie
Wenn jetzt ein Feld den Wert NULL und keine Zahl hat wie kann ich das dann mit den Einträgen mit einer Zahl vergleichen und was hat das mit kat_id zu tun ?

@ onemorenerd
Die "3. Option" ist erst zum Schluss dazugekommen weil ich vergessen habe dass es ja sein kann dass etwas garnicht vorhanden ist, daher die "2". Natürlich könnte ich es komplett umändern aber ich habe gehofft dass mir das erspart bleibt.
Mit Zitat antworten
  #5 (permalink)  
Alt 26-04-2010, 12:51
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
und was hat das mit kat_id zu tun ?
Die kat_id ist doch sicherlich auch numerisch? Oder?
Darf man dich nicht auf weitere Fehlerquellen hinweisen?

Ich halte es für einen extremen Fehler, Felder welche nur rein numerisch sein können in String Felder zu packen.


Code:
ORDER BY FIELD(`parken`,1,2,0)
oder nach der Korrektur:
Code:
ORDER BY FIELD(`parken`,1,2,NULL)
__________________
Wir werden alle sterben
Mit Zitat antworten
  #6 (permalink)  
Alt 26-04-2010, 13:04
Rollimen
 Registrierter Benutzer
Links : Onlinestatus : Rollimen ist offline
Registriert seit: Apr 2010
Beiträge: 10
Rollimen befindet sich auf einem aufstrebenden Ast
Standard

nein, das sollte keine Kritik sein, ich wollte es nur wissen.

Die kat_id habe ich als Stringfeld gewählt weil ich noch nicht weis ob in Zukunft nicht noch weitere Kategorien dazu kommen und es kein "NULL" gibt weil jede Kategorie ein ID hat.

Du meinst also ich sollte es von VARCHAR in CHAR ändern? versteh ich das richtig ?

Wie würde dann das ORDER BY FIELD weiter aussehen ORDER BY FIELD ('parken',1,2,NULL,'eingang',....) ASC/DESC oder muss jedes Feld einzeln angesprochen werden und ist die Reihenfolge 1,2,NULL auch die REihenfolge der Sortierung ?
Mit Zitat antworten
  #7 (permalink)  
Alt 26-04-2010, 13:10
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Die kat_id habe ich als Stringfeld gewählt weil ich noch nicht weis ob in Zukunft nicht noch weitere Kategorien dazu kommen und es kein "NULL" gibt weil jede Kategorie ein ID hat.
Du setzt das Dinge in Beziehung zu einander, die nix, aber auch nix miteinander zu tun haben.
Z.B. woher weißt du, dass man Stringfelder nicht auf NULL setzen kann?

Zitat:
Du meinst also ich sollte es von VARCHAR in CHAR ändern? versteh ich das richtig ?
Ist CHAR numerisch?
(Grrrr)

Zitat:
oder muss jedes Feld einzeln angesprochen werden
ja

Zitat:
und ist die Reihenfolge 1,2,NULL auch die REihenfolge der Sortierung ?
Rate mal...
Oder schau mal ins MySQL Handbuch...
Oder probiers einfach aus...


PS:
Zitat:
ORDER BY FIELD ('parken',
Wenn ich parken in Backticks setze, dann meine ich auch Backticks und keine Anführungszeichen.

(sorry, dass ich etwas genervt klinge, ich halte mich jetzt auch hier raus)
__________________
Wir werden alle sterben

Geändert von combie (26-04-2010 um 13:15 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 26-04-2010, 13:39
Rollimen
 Registrierter Benutzer
Links : Onlinestatus : Rollimen ist offline
Registriert seit: Apr 2010
Beiträge: 10
Rollimen befindet sich auf einem aufstrebenden Ast
Standard

Okay, das mit dem NULL habe ich hab ich verstanden, habe diese Option nur noch nie verwendet.

Verratest du mir bitte warum das aber so wichtig ist zumal ja die kat_id weder NULL noch leer sein darf (wird auch vor dem speichern geprüft)?

Ich finde im deutschen MySQL-Handbuch auch keine Erklärung zu Feldern mit rein numerischen Inhalt, warum ist das deiner Meinung nach ein schwerer Fehler ?

Ich möchte deiner Meinung nicht widersprechen, ich wüsste nur gerne warum es so ist.

Im übrigen "probiere" ich schon einige Zeit rum da ich aber damit zu keiner Lösung gekommen bin habe ich mein Problem ja hier gepostet.

Es tut mir leid dass du genervt bist aber warum antwortest du dann eigentlich auf ein Posting wenn dir die Geduld dazu fehlt ? Bitte nicht falsch verstehen. Das mit ' statt ` war nicht bewusst, sorry.

Geändert von Rollimen (26-04-2010 um 13:43 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 26-04-2010, 14:01
Rollimen
 Registrierter Benutzer
Links : Onlinestatus : Rollimen ist offline
Registriert seit: Apr 2010
Beiträge: 10
Rollimen befindet sich auf einem aufstrebenden Ast
Standard

So, das eigentliche Problem habe ich jetzt mal gelöst, die Daten werden nun in der richtigen Reihenfolge ausgegeben.

Ich habe wie empfohlen, 1 und 2 vertauscht und mit dem Tipp von onemorenerd (SELECT ... ORDER BY ..., (parken + zugang + wc + tische + bad + pool + strand + see) DESC) die Abfrage erweitert und alles klappt, Danke

Was die anderen Fragen bzw. mögliche Fehler betrifft so würde ich gerne noch die Antworten erfahren.
Mit Zitat antworten
  #10 (permalink)  
Alt 26-04-2010, 15:03
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Okay, das Sortierproblem ist jetzt gelöst. Nun kümmern wir uns mal um die Designfehler.

Die Spalten parken, zugang etc. hast du alle als CHAR(1) definiert. Du speicherst aber nur Zahlen in diesen Spalten, keine Buchstaben oder sonstige Zeichen. Demnach wäre der korrekte Datentyp für diese Spalten INT, nicht CHAR.

Die Spalte kat_id hast du als VARCHAR(10) definiert. Falls deine Kat_IDs nur Zahlen enthalten, solltest du diese Spalte ebenfalls als INT definieren.

In den Spalten parken, zugang etc. speicherst du 0, 1 oder 2. Ich vermute mal, diese Zahlen stehen im weitesten Sinn für "ja", "nein" und "keine Angabe". Die Werte 0 und 1 sind okay, aber für "keine Angabe" solltest du NULL speichern. Das ist in SQL explizit dafür vorgesehen (dreiwertige Logik -> Google).

Last but not least wirkt das DB-Schema nicht ganz normalisiert (Normalisierung -> Google). Das ist jetzt nur eine Vermutung, da ich deine Applikation nicht kenne, aber möglicherweise sollten die Felder parken, zugang etc. sowie deren *_info-Kompanions in eine separate Tabelle ausgelagert werden.
Mit Zitat antworten
  #11 (permalink)  
Alt 26-04-2010, 15:20
Rollimen
 Registrierter Benutzer
Links : Onlinestatus : Rollimen ist offline
Registriert seit: Apr 2010
Beiträge: 10
Rollimen befindet sich auf einem aufstrebenden Ast
Standard

Die Spaltentypen habe ich bereits geändert, habe über Google eine Seite gefunden auf der die einzelnen Typen genau erklärt sind und habe nun auch verstanden wie bzw. warum.

Das mit dem Wert NULL muss ich mir mal genauer anschauen, ich will nicht etwas ändern weil es jemand sagt sondern weil ich es verstanden habe warum es so sein soll, nicht falsch verstehen.

Zitat:
Last but not least wirkt das DB-Schema nicht ganz normalisiert (Normalisierung -> Google). Das ist jetzt nur eine Vermutung, da ich deine Applikation nicht kenne, aber möglicherweise sollten die Felder parken, zugang etc. sowie deren *_info-Kompanions in eine separate Tabelle ausgelagert werden.
Ich stimme dir zu dass diese Felder in einer eigenen Tabelle stehen könnten, was mir jedoch noch nicht ganz klar ist worin der Vorteil liegt. Dazu muss ich aber gestehen dass ich die kombinierte Abfrage bzw. Update zweier Tabellen noch nicht so ganz kapiert habe.

Ich lerne PHP zwar schon einige Zeit und habe schon einige Dinge gemacht aber da ich nicht gut englisch kann und anhand von Beispielen versuche die jeweiligen Funktionen zu verstehen, kommt es auch vor dass ich kein, für mich verständliches Beispiel finde oder halt die "Fehler" von anderen übernehme.
Mit Zitat antworten
  #12 (permalink)  
Alt 26-04-2010, 15:57
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

In der Regel ist es so, dass sich Design Fehler später schwer rächen!
1. sie machen die Abfragen komplizierter als nötig
2. bei späteren Erweiterungen der Tabellen müssen mehr Abfragen geändert werden
3. die Performance sinkt
4. die im DBMS eingebauten Optimierungen greifen nicht
5. du beißt dich selber später in den Hintern, wenn du den Code überarbeiten musst
6. deine Nachfolger schimpfen

Hier mal ein paar Links zum Thema:
MySQL :: MySQL 5.1 Referenzhandbuch :: 11 Datentypen
Die 5 Normal Formen
A Visual Explanation of SQL Joins
__________________
Wir werden alle sterben
Mit Zitat antworten
  #13 (permalink)  
Alt 26-04-2010, 16:18
Rollimen
 Registrierter Benutzer
Links : Onlinestatus : Rollimen ist offline
Registriert seit: Apr 2010
Beiträge: 10
Rollimen befindet sich auf einem aufstrebenden Ast
Standard

Zu Punkt 1-4 kann ich nichts sagen aber da ich annehme dass du dich auskennst wird es sicher so sein.

Zu Punkt 5 kann ich nur sagen, aus Fehler lernt man und je mehr arbeit man wegen eines Fehlers hat desto sicher ist es dass man diesen Fehler nie wieder macht.

Zu Punkt 6 sage ich nur dass dies hier nicht zutrifft denn es ist nicht geplant dass es jemals einen Nachfolger geben wird (hat mit der Mentalität und der Einstellung der österreichischen Behinderten zu tun). Beider Rollstuhlseiten werden mit mir sterben.

Danke für die Links, den ersten kenne ich, den 2ten werde ich mir so schnell wie möglich anschauen. Beim 3ten Link habe ich das Problem dass meine Englisch-Kentnisse leider sehr mangelhaft sind aber ich habe da eine "deutsche" Seite gefunden die anscheinend mit Euren Tipps übereinstimmt und die Sachen einfach und leicht verständlich erklärt.

Falls jemand interesse hat hier der Link: http://www.peterkropff.de
Mit Zitat antworten
  #14 (permalink)  
Alt 26-04-2010, 17:10
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Zitat von Rollimen Beitrag anzeigen
ich habe da eine "deutsche" Seite gefunden die anscheinend mit Euren Tipps übereinstimmt … http://www.peterkropff.de
Das könnte daran liegen, dass der Autor auch Moderator in diesem Forum ist. ;-)
Mit Zitat antworten
  #15 (permalink)  
Alt 26-04-2010, 17:25
Rollimen
 Registrierter Benutzer
Links : Onlinestatus : Rollimen ist offline
Registriert seit: Apr 2010
Beiträge: 10
Rollimen befindet sich auf einem aufstrebenden Ast
Standard

und ich dachte schon dass ich mal was weis.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
mysql, sortierung, summe


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem bei der Ausgabe der Daten oli SQL / Datenbanken 8 29-12-2009 16:02
Problem mit ausgabe der mySQL-Daten SteveP PHP Developer Forum 6 01-08-2006 11:02
Problem der richtigen Daten-Ausgabe in einer Tabelle Heart PHP Developer Forum 8 26-11-2004 09:30
[ASP] Problem mit Ausgabe von Daten. Kinga2000 HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 1 01-04-2004 16:19
Sortierung bei HTML- ausgabe Labonga PHP Developer Forum 6 05-12-2001 07:57

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:15 Uhr.