0

mysql で 2 つのテーブルを取得しました。それらを脂質と付加物と呼びます。

脂質:

    ID  |  name  |  mz  |  hg  |
    1   |  36:2  |  785 |  PC  |
    2   |  36:1  |  803 |  PT  |
    3   |  36:2  |  804 |  PS  |

付加物:

    ID  |  name  |  mz     |  charge   |
    1   |  +H+   |  1.     |  1        |
    2   |  -H+   |  -1.    |  -1       |

わかりました、36:2 を検索する必要がありますが、与えられたすべての情報が必要であり、さらに mz に追加された付加表が必要です。したがって、次のような配列を取得する必要があります。

    [ID] => 1
    [name] => 36:2
    [hg] => PC
    [mz] => 785
    [mz +H+]=>786
    [charge +H+] =>1
    [mz-H+] =>784
    [charge -H+] =>-1

    [ID] => 3
    [name] => 36:2
    [hg] => PS
    [mz] => 804
    [mz +H+]=>805
    [charge +H+] =>1
    [mz-H+] =>803
    [charge -H+] =>-1

編集:

私はWebサイトを使用してmysqlデータベースから結果を取得しています...だから、このphpコードを使用しています..結果の一部を取得しています。

if(preg_match('/([0-9]+):([0-9]+)/',$name))
{
 if(!$head)
   {
       $result = mysql_query("SELECT  * FROM lipids where name='$name'");
   }

  while($row = mysql_fetch_array($result, MYSQL_ASSOC))
     {
       print_r($row);            
    }

//$name = ユーザーが入力フィールドから入力する変数です。

oen 入力には複数の回答があります。したがって、回答のリストは大きくなります。上記の表は、より多くのデータがあるため、簡単な概要にすぎません。

4

1 に答える 1

0

付加物の内容が2行に固定されていると仮定すると、おそらく次のようになります:-

SELECT a.ID, a.name, a.hg, a.mz, a.mz+b.mz AS 'mz +H+', b.mz AS 'charge +H+', a.mz+c.mz AS 'mz -H+', c.mz AS 'charge -H+'
FROM lipids a
LEFT JOIN adduct b ON b.name = '+H+'
LEFT JOIN adduct b ON b.name = '-H+'

しかし、付加体に多くの +H+ 行が表示されるかどうかはわかりません (たとえば)

編集

結合を実行して、mz 名と料金ごとに 1 つの行を取得し、後でコードで並べ替えることができます (ほとんどの言語は簡単です):-

SELECT a.ID, a.name, a.hg, a.mz, b.name, a.mz+b.mz, b.mz
FROM lipids a
CROSS JOIN adduct b 
WHERE a.name='36:2'

また、すべてのデータを 1 つのフィールドに連結し、後でそれをコード内の配列に分解することもできます。PHPで簡単。

SELECT a.ID, a.name, a.hg, a.mz, GROUP_CONCAT(CONCAT_WS('~', 'mz', b.name, a.mz+b.mz, 'charge', b.name, b.mz) SEPARATOR '~')
FROM lipids a
CROSS JOIN adduct b 
WHERE a.name='36:2'
GROUP BY a.ID, a.name, a.hg, a.mz

もう一度編集

仕事をするためのPHP

<?php

    if(preg_match('/([0-9]+):([0-9]+)/',$name))
    {
        if(!$head)
        {
            $result = mysql_query("SELECT a.ID, a.name, a.hg, a.mz, b.name AS AdductName, a.mz+b.mz AS MzCharge, b.charge
                                FROM lipids a
                                CROSS JOIN adduct b 
                                WHERE a.name='$name'");

            $StoreArray = array();

            while($row = mysql_fetch_array($result, MYSQL_ASSOC))
            {
                $StoreArray['ID'] = $row['ID'];
                $StoreArray['name'] = $row['name'];
                $StoreArray['hg'] = $row['hg'];
                $StoreArray['mz'] = $row['mz'];
                $StoreArray['mz '.$row['AdductName']] = $row['MzCharge'];
                $StoreArray['charge '.$row['AdductName']] = $row['charge'];
            }
            print_r($StoreArray);            
        }
    }

?>

もう一度編集

同じ名前の複数の脂質レコードに対処するには

<?php

$link = mysql_connect('localhost', 'root', '');
If (!$link) 
{
    die ('Could not connect: ' . mysql_error());
}
@mysql_select_db('testarea') or die ('Unable to select database');

$name = '36:2';


            $result = mysql_query("SELECT a.ID, a.name, a.hg, a.mz, b.name AS AdductName, a.mz+b.mz AS MzCharge, b.charge
                                FROM lipids a
                                CROSS JOIN adduct b 
                                WHERE a.name='$name'");

            $CurrId = 0;
            $StoreArray = array();

            while($row = mysql_fetch_array($result, MYSQL_ASSOC))
            {
                if ($CurrId != $row['ID'])
                {
                    $CurrId = $row['ID'];
                    $StoreArray[$CurrId] = array();
                }
                $StoreArray[$CurrId]['ID'] = $row['ID'];
                $StoreArray[$CurrId]['name'] = $row['name'];
                $StoreArray[$CurrId]['hg'] = $row['hg'];
                $StoreArray[$CurrId]['mz'] = $row['mz'];
                $StoreArray[$CurrId]['mz '.$row['AdductName']] = $row['MzCharge'];
                $StoreArray[$CurrId]['charge '.$row['AdductName']] = $row['charge'];
            }
            print_r($StoreArray);            



?>
于 2013-06-21T13:14:18.163 に答える