簡體   English   中英

從mysql動態選擇列

[英]dynamically select columns from mysql

我有幾個問題引領動態部分,但我認為這應該是有道理的

$memberID = 7;
$oreVolumePriceQuery = "SELECT od.oreID, od.oreType, od.name, od.inGameID, od.size, ir.officialCorpRate FROM oreData od JOIN itemRates ir ON od.inGameID = ir.typeID order by od.oreID asc";
$oreVolumePriceResult = mysql_query($oreVolumePriceQuery);
while($row = mysql_fetch_assoc($oreVolumePriceResult)){
    $oreType = $row['oreType'];
    $getRefiningRateQuery = "SELECT '$oreType' FROM memberData WHERE member_id = '$memberID'";
    $getRefiningRateResult = mysql_query($getRefiningRateQuery);
    while($row = mysql_fetch_assoc($getRefiningRateResult)){
    $refiningRate = $row['$oreType'];

第一個查詢返回類似於下面的結果(實際上是31行,但是2就足夠了)

oreID | oreType | name     | inGameID | size | officialCorpRate
 1    | veld    | veldspar | 1230     | 0.1  | 10.21
 2    | scor    | scordite | 1228     | .15  | 10.2

基於第一行,第二個查詢最終成為

SELECT veld FROM memberData WHERE member_ID = '7'

此查詢返回正確的結果

veld
 .7

但是這一切都在最后一行分崩離析,它在那里動態地選擇從查詢中提取哪一列。 有沒有辦法解決這個問題?

您正在定義兩個相同的$ row名稱,將第二次獲取重命名為$ row1 forexemple

 while($row = mysql_fetch_assoc($oreVolumePriceResult)){
$oreType = $row['oreType'];
$getRefiningRateQuery = "SELECT '$oreType' FROM memberData WHERE member_id = '$memberID'";
$getRefiningRateResult = mysql_query($getRefiningRateQuery);
while($row1 = mysql_fetch_assoc($getRefiningRateResult)){
$refiningRate = $row1[$oreType];

根據經驗,你應該總是添加mysql_error(); 當您的查詢因未知原因而失敗時。 所以,試試這個,因為我做了3/4更改:

$oreVolumePriceQuery = "SELECT od.oreID, od.oreType, od.name, od.inGameID, od.size, ir.officialCorpRate FROM oreData od JOIN itemRates ir ON od.inGameID = ir.typeID order by od.oreID asc";
$oreVolumePriceResult = mysql_query($oreVolumePriceQuery) or die(mysql_error());
while($row = mysql_fetch_assoc($oreVolumePriceResult)){
    $memberID = 7;
    $oreType = $row['oreType'];
    $getRefiningRateQuery = "SELECT '$oreType' FROM memberData WHERE member_id = '$memberID'";
    $getRefiningRateResult = mysql_query($getRefiningRateQuery) or die(mysql_error());
    while($row = mysql_fetch_assoc($getRefiningRateResult)){
    $refiningRate = $row['$oreType'];

單引號中的變量將不會被評估,因此而不是

$refiningRate = $row['$oreType'];

你可能想要的

$refiningRate = $row[$oreType];

另外,您是否有理由不僅將memberData表加入原始查詢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM