Tabellen verknüpfen mit InnoDB

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • AmicaNoctis
    replied
    Das geht nur mit einer Unterabfrage, aber nimm eine unkorrelierte!

    Beispiel:

    Code:
    select *
    from thread
    join (
    		select *
    		from posting
    		order by `date` desc
    		limit 3
    	) as p
    	on p.thread_fkey = thread.id
    order by thread.title, p.`date`;

    Leave a comment:


  • rundmc
    replied
    ok danke,

    dann hab ich noch eine einzige frage an euch profis.

    PHP Code:
    $query "SELECT s.*, h.*
                  FROM p_history AS h
                  RIGHT JOIN p_stocks AS s ON (h.stock_id = s.stock_id)
                  LIMIT 10"

    gibt es für diese abfrage eine möglichkeit von jeder stock_id nur die letzten 10 history_t auszugeben.

    in der p_history sind alle history daten gespeichert und in jeder zeile ist die jeweilige stock_id gespeichert, zu der die daten gehören.

    jede aktie hat 62 einträge in der p_history, und jetzt möchte ich gern nur die letzten 10 history daten für jede aktie ausgeben.

    geht sowas in MYSQL.

    danke vielmals

    Leave a comment:


  • AmicaNoctis
    replied
    Dann aggregiere das Ergebnis mit PHP in einem Array und benutze dann array_reverse. Anders geht es nicht oder du brauchst zwei Abfragen.

    Du möchtest jetzt bitte deinen Code auf 100 Zeichen umbrechen!

    Leave a comment:


  • rundmc
    replied
    ja, das ist mir schon klar, aber so werden fängt er dann beim 2010-01-27 and hört beim 2010-01-17 auf.

    genau das möcht ich dann nochmal invertieren.

    Leave a comment:


  • AmicaNoctis
    replied
    Mit ORDER BY ... DESC kannst du absteigend nach ... sortieren.

    Leave a comment:


  • rundmc
    replied
    danke.

    gibt es dann zumindest eine funktion so wie LIMIT nur von hinten?

    es sollen mir nur die letzten 10 ausgegeben werden, wo die WHERE klausel stimmt.

    danke

    Leave a comment:


  • wahsaga
    replied
    Originally posted by rundmc View Post
    die $row['cnt'] gibt mir immer 1 aus, warum?
    Weil COUNT die Ergebnisse der Gruppierung zählt.

    Spalten zu selektieren, die nicht Bestandteil der Gruppierung sind, ist übrigens in SQL nicht erlaubt - MySQL lässt es lediglich durchgehen, wenn es entsprechend fehlertolerant eingestellt ist.

    Leave a comment:


  • rundmc
    replied
    Danke dir, aber hab nun noch ein problem

    PHP Code:
    <?php

    $connection 
    mysql_connect('localhost''root''blenialo');
    $db         mysql_select_db('project');

    $query "SELECT s.*, h.*, COUNT(*) AS cnt
              FROM p_history AS h 
              RIGHT JOIN p_stocks AS s ON (h.stock_id = s.stock_id) 
              WHERE s.stock_symbol='AACC'
              GROUP BY h.history_id"
    ;
                  
    $result mysql_query($query);

    while (
    $row mysql_fetch_assoc($result)) {
        echo 
    $row['cnt'] . ' : ' $row['stock_name'] . ' : ' $row['history_c']
            . 
    ' : ' $row['history_v'] . ' : ' $row['history_t'] . '<br />';
    }

    ?>
    die $row['cnt'] gibt mir immer 1 aus, warum?

    es sollten eigentlich 62 zeilen sein, die diese bedingungen erfüllen.

    danke, mfg tom
    Last edited by AmicaNoctis; 29-01-2010, 12:57.

    Leave a comment:


  • unset
    replied
    Wie du Joins machst, weißt du aber schon, oder? Wenn nicht, hast du ja schon mal das Stichwort!

    Leave a comment:


  • rundmc
    started a topic Tabellen verknüpfen mit InnoDB

    Tabellen verknüpfen mit InnoDB

    Hallo Leute,

    Ich habe zwei Tabellen:

    p_stocks (stock_id, stock_symbol, stock_name);
    p_history (history_id, stock_id, history_c, history_o);

    nun habe ich in InnoDB die p_history.stock_id mit der p_stocks.stock_id verknüpft, und funktioniert auch super.

    nun möcht ich aber gern eine abfrage machen.
    ich habe ein <input> feld wo man das symbol für die aktie eingeben kann, und nun möchte ich gerne alle historischen kurse von dieser aktie ausgeben.

    ich könnte es so realisieren:
    PHP Code:
    $stockQuery "SELECT * FROM p_stocks WHERE stock_symbol=GOOG";
    $stockResult mysql_query($stockQuery);

    while (
    $row mysql_fetch_assoc($stockResult)) {
        
    $historyQuery "SELECT * FROM p_history WHERE stock_id=" $row['stock_id'];
        
    $historyResult mysql_query($historyQuery);

        while (
    $row1 mysql_fetch_assoc($historyResult)) {
            echo 
    $row['stock_symbol'] . ' : ' $row1['history_o']
                . 
    '-' $row1['history_c'] . '<br />';
        }

    das ist mir aber zu wenig elegant. kann ich das nicht mit einer sql abfrage machen?

    danke

    lg tom
    Last edited by AmicaNoctis; 29-01-2010, 12:56.
Working...
X