2012-10-14 98 views
0

使用PHP,對於MySQL查詢結果集中的每一行,我需要執行另一個MySQL查詢。到目前爲止,我已經得到了在PHP循環中追加MySQL結果

$result = mysql_query("SELECT id, state FROM states WHERE region='given_region'") 
or die(mysql_error()); 

while($row = mysql_fetch_row($result)) 
{ 
    $state = $row['state']; 
    $r = mysql_query("SELECT * FROM locations WHERE state REGEXP '(^|,)".$state."($|,)'"); 
} 

現在我需要所有的結果$ R的追加到一個結果集,我可以再用一個標準while循環,但是,我非常有限的PHP技能是通過迭代讓我無法獲得代碼來做到這一點。

任何人都可以提供任何有關如何將所有結果追加到給定的while循環內的一個集合的見解嗎?

謝謝!

回答

4

瞭解SQL joins

SELECT states.id, states.state, locations.* 
FROM states LEFT JOIN locations USING(state) 
WHERE states.region = 'given_region' 
+0

我確實與更高級的聯接鬥爭,所以我可能會錯,但我不認爲我可以在我的聯接中使用Join案件。我過分簡化了上面的示例。在while循環中的查詢中,我實際上將單個值狀態與逗號分隔列表中的可能值進行匹配。所以'狀態'列實際上是一個狀態列表,我想匹配$ state在列表中的所有行。我修改了上面的示例。 – JToland

+0

@JToland:我強烈建議你[標準化](http://en.wikipedia.org/wiki/Database_normalization)你的模式。但是,如果這是不可能的,你可以用'ON FIND_IN_SET(states.state,locations.state)'替換上面的'USING(state)'' – eggyal

+0

我知道規範化數據肯定是這個長期的最好方法,但不幸的是,這不是我可以輕易改變的(或者至少不夠快以適應我目前的需要)。我用'ON FIND_IN_SET'嘗試了上面的查詢,並且工作得很好!它似乎給了我所需要的,而且比我之前試圖做的更容易,謝謝很多@eyal! – JToland

0

你可以嘗試使用的foreach,而不是同時的。我很抱歉,但我真的沒有得到這個問題。

如果你使用一個foreach,你可以用它生成整個表,如果你願意。讓我給你舉個例子:

<?php 
Foreach($result as $output) : ?> 
<div id="results"> 
<table id="generated table"> 
<tr> 
<td><?php echo $output->id ?></td><td> <?php echo $output->state ?></td> 
</tr> 
</table> 
<?php endforeach ?> 
</div> 

你要知道,如果你使用foreaches你可以得到整個表,而不是使用查詢來選擇一些列。然後你通過foreach輸出列數據(通過使用$ output-> columnname命令)