tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Yaslaw
  • 1 Beitrag von Yaslaw
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
551
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Joe Joe ist offline Mitglied Brokat
    Registriert seit
    Aug 2009
    Ort
    Thüringen
    Beiträge
    339
    Hallo Tutorials,
    Hab mich mal an den Joins versucht die mir bisher völlig unverständlich waren.
    Ist mir sogar erstaunlicherweisse recht gut gelungen.

    Vieleicht kann wer von euch was dazu sagen was man anders oder besser machen könnte.
    Auserdem würde ich gerne wissen wie ich die Zeit messen kann. Ist hierr möglicherweisse ein Left inner oder sonstiger Join besser und wenn ja weshalb? Würde gerne mehr darüber erfahren und bin daher über jeden Tip dankbar.

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    SELECT
        t1.*,
        t2.*
    FROM
        Gebaeudeanforderungen AS t1,
        GebaeudestufenUser AS t2
    WHERE
        t2.Username='$Username'
    AND
            t1.Gebäude 
        IN 
            (CONCAT('Lager',CASE WHEN (1+t2.Lager>=10) THEN '10' ELSE 1+t2.Lager END)
            ,CONCAT('Bibliothek',CASE WHEN (1+t2.Bibliothek>=10) THEN '10' ELSE 1+t2.Bibliothek END)
            ,CONCAT('Krankenstation',CASE WHEN (1+t2.Krankenstation>=10) THEN '10' ELSE 1+t2.Krankenstation END)
            ,CONCAT('Labor',CASE WHEN (1+t2.Labor>=10) THEN '10' ELSE 1+t2.Labor END)
            ,CONCAT('Brunnen',CASE WHEN (1+t2.Brunnen>=10) THEN '10' ELSE 1+t2.Brunnen END)
            ,CONCAT('Tank',CASE WHEN (1+t2.Tank>=10) THEN '10' ELSE 1+t2.Tank END)
            ,CONCAT('Werkstatt',CASE WHEN (1+t2.Werkstatt>=10) THEN '10' ELSE 1+t2.Werkstatt END)
            ,CONCAT('Funkanlage',CASE WHEN (1+t2.Funkanlage>=10) THEN '10' ELSE 1+t2.Funkanlage END)
            ,CONCAT('Funkturm',CASE WHEN (1+t2.Funkturm>=10) THEN '10' ELSE 1+t2.Funkturm END)
            ,CONCAT('Viehstall',CASE WHEN (1+t2.Viehstall>=10) THEN '10' ELSE 1+t2.Viehstall END)
            ,CONCAT('Garten',CASE WHEN (1+t2.Garten>=10) THEN '10' ELSE 1+t2.Garten END)
            ,CONCAT('Garage',CASE WHEN (1+t2.Garage>=10) THEN '10' ELSE 1+t2.Garage END)
            ,CONCAT('Schlafquartiere',CASE WHEN (1+t2.Schlafquartiere>=10) THEN '10' ELSE 1+t2.Schlafquartiere END)
            ,CONCAT('Abwehrtürme',CASE WHEN (1+t2.Abwehrtürme>=10) THEN '10' ELSE 1+t2.Abwehrtürme END)
            ,CONCAT('Mauern',CASE WHEN (1+t2.Mauern>=10) THEN '10' ELSE 1+t2.Mauern END));

    Tabelle GebaeudestufenUser beinhaltet nur die jeweilige Stufe(int) des jeweiligen gebauten Gebäudes je User.
    Tabelle Gebaeudeanforderungen beinhaltet zu jeden Gebäude und jeder Stufe die zum Bau benötigten Ressourcen.

    Ausgabe: Nächste Baustufe des Gebäudes und die dazu benötigten Ressourcen.

    Zum Concat: zb beim Lager kommt dabei der Spaltenname Lager2 raus.
    Die Zahl darf nicht höher als 10 sein weil es nur 10 Stufen gibt (Stufe11 hätte keine Ressourcen).


    Also bin für Tipss dankbar! Gruss Joe.
    Geändert von Joe (18.12.11 um 00:26 Uhr) Grund: " entfernt zwecks lesbarkeit :)
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Item: Dein CASE kannst du acuh einfach mit LEAST lösen
    Code sql:
    1
    2
    3
    
    CASE WHEN (1+t2.Lager>=10) THEN '10' ELSE 1+t2.Lager END
    -- ist dasselbe wie
    LEAST(1+t2.Lager, 10)
    Joe bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    Joe Joe ist offline Mitglied Brokat
    Registriert seit
    Aug 2009
    Ort
    Thüringen
    Beiträge
    339
    Danke Yaslaw das sind genau die Tipps die ich mir wünsche
    Ich antworte morgen nochmal mit ein oder 2 Fragen auf deinem Post. Ist ja auch schon etwas spät, aber die Antwort wars mir wert

    Gruss Joe.
     

  4. #4
    Joe Joe ist offline Mitglied Brokat
    Registriert seit
    Aug 2009
    Ort
    Thüringen
    Beiträge
    339
    Hab das so umgestzt wie vorgeschlagen Yaslaw.
    Im Moment fällt mir auch keine Frage weiter ein. Intressant wäre wirklich noch zu wissen wie man die Zeit messen könnte. ZB. Ich nehme nen Inner Join oder Left Join und schaue was schneller geht.

    Ansonsten wenn noch jemanden was zum Thema einfällt gerne , derweil hake ich Thema mal als erledigt ab.

    Danke Yaslaw.
     

  5. #5
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    INNER JOIN und LEFT JOIN gibt versch. Resultate aus. Ergo bringt da ein Zeitvergleich nix. Du solltest die JOIN-Art anhand des gewünschten Resultates auswählen.

    Wenn du wirklich mal Messungen machen willst, Kannst du ja in PHP die Zeit messen. Oder du nimmst HeidiSQL (mit dem Tool erstelle und Teste ich immer meine Queries). Dort wird die Zeit auch ausgegeben. Du kannst da ebenfalls den Execute-Plan anschauen.
    Joe bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  6. #6
    Joe Joe ist offline Mitglied Brokat
    Registriert seit
    Aug 2009
    Ort
    Thüringen
    Beiträge
    339
    Hmm würde echt gerne mal nen Tutorial zu HeidiSQL sehen, sowas wie Handlng der Syntax und Query-Aufbau mit Hilfe von HeidiSQL. Einfach mal sehen wie nen Profi oder Forfgeschrittener damit so arbeitet. Bisher ist mir der Sinn dieses Proggs irgendwie noch unklar. Immerhin hab ichs hinbekommen die Zeit zu messen
    Erster Versuch mit Join-MYSQL-heidisql.png

    Naja die Zeit zu messen wäre allein schon deswegen intressant um zu shen ob 2 Queries schneller oder langsamer arbeiten als der Join den man bastelt.
    Die veschiedenen JoinArten muss ich mir nochmal genauer anschauen.
     

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Ïm Unteren Bereich hast du hast du sowas wie ein Log. Alles was ausgeführt wird, wird dort angezeigt.
    Schau mal in deinem PrintScreen im Unteren Logbereich die Zeile 238 und 240 an. Dort siehst du wie lange das Query brauchte....

    Ansonsten siehts bei mir genauso aus wie bei dir. So testet man....
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  8. #8
    Joe Joe ist offline Mitglied Brokat
    Registriert seit
    Aug 2009
    Ort
    Thüringen
    Beiträge
    339
    Jap habs gesehen. Genau darum gings. Hatte den Gedanken das php da zu ungenau wird daher ist HeidiSQL perfekt. Richtig intressant wird das Zeit messen dann bei sehr grossen Datenbanken.

    Naja die Zeit zu messen wäre allein schon deswegen intressant um zu shen ob 2 Queries schneller oder langsamer arbeiten als der Join den man bastelt.
    Die veschiedenen JoinArten muss ich mir nochmal genauer anschauen.
    War quasi die Antwort auf deinen Post drüber
     

Ähnliche Themen

  1. Erster Versuch
    Von xScaRx im Forum Bildbearbeitung & Illustration
    Antworten: 21
    Letzter Beitrag: 11.11.07, 20:11
  2. Erster Versuch...
    Von benninet im Forum Fotografie
    Antworten: 32
    Letzter Beitrag: 19.07.07, 13:45
  3. Erster Versuch
    Von Spuerlue im Forum 3D-Stills
    Antworten: 3
    Letzter Beitrag: 30.05.07, 18:00
  4. erster Versuch
    Von cszymc01 im Forum 3D-Stills
    Antworten: 1
    Letzter Beitrag: 10.01.06, 14:54
  5. Erster Versuch!
    Von daddz im Forum 3D Studio Max
    Antworten: 4
    Letzter Beitrag: 25.01.04, 18:15

Stichworte