Zagniężdżona pętla działa jedynie dla pierwszego wyniku

0

Posiadam kod

$exportQuery = tep_db_query($exportSQL);
$exportQuery1 = tep_db_query($exportSQL);

if (tep_db_num_rows($exportQuery) > 1) {
	while ($exportList = tep_db_fetch_array($exportQuery)) {
		while ($exportList1 = tep_db_fetch_array($exportQuery1)) {
			if ($exportList['pi'] == $exportList1['categories_id']) {
				$exportList['pi'] = $exportList1['cn'];
				// break;
			}
		}
		print_r($exportList).PHP_EOL;

Wynikiem jego ma podmieniać ID kategorii, ja jego nazwę. Wynik tego kodu wygląda następująco

Array ( [categories_id] => 51 [pi] => DEEP BLUE [cn] => All Purpose AP )
Array ( [categories_id] => 49 [pi] => 43 [cn] => Pro Sea Diver 1K )
Array ( [categories_id] => 45 [pi] => 43 [cn] => Jugg V / NOWOĹÄ )

Jak widać, w pierwszej tablicy poprawnie zamienił ID na nazwę kategorii.

Co jest powodem, iż dalsze kategorie nie są podmieniane?

0

Bo tylko w pierwszej tablicy spełniony był warunek do podmiany? BTW słyszałeś o czymś takim jak var_dump()? Jak nie, to usłysz :)

0

@Thommen: A nie prościej jakiego JOIN'a użyć?

0

Dla kodu

$exportQuery = tep_db_query($exportSQL);

if (tep_db_num_rows($exportQuery) > 1) {
	while ($exportList = tep_db_fetch_array($exportQuery)) {

		// print_r($exportList);
		var_dump($exportList);
		// fputcsv($output, $exportList, ";");
	}
}

Posiadam

array(3) { ["categories_id"]=> string(2) "51" ["pi"]=> string(2) "43" ["cn"]=> string(14) "All Purpose AP" }
array(3) { ["categories_id"]=> string(2) "49" ["pi"]=> string(2) "43" ["cn"]=> string(16) "Pro Sea Diver 1K" }
array(3) { ["categories_id"]=> string(2) "45" ["pi"]=> string(2) "43" ["cn"]=> string(17) "Jugg V / NOWOĹÄ" }

Każdy klucz 'pi' posiada wartość "43"
Zmieniam kod, aby podmienić wartość 'pi' z liczby na nazwę kategorii

$exportQuery = tep_db_query($exportSQL);
$exportQuery1 = tep_db_query($exportSQL);

if (tep_db_num_rows($exportQuery) > 1) {
	while ($exportList = tep_db_fetch_array($exportQuery)) {
		while ($exportList1 = tep_db_fetch_array($exportQuery1)) {
			if ($exportList['pi'] == $exportList1['categories_id']) {
				$exportList['pi'] = $exportList1['cn'];
				// break;
				// print_r($exportList1);
			}
		}
		// print_r($exportList).PHP_EOL;
		var_dump($exportList);
		// fputcsv($output, $exportList, ";");
	}
}

i posiadam

array(3) { ["categories_id"]=> string(2) "51" ["pi"]=> string(9) "DEEP BLUE" ["cn"]=> string(14) "All Purpose AP" }
array(3) { ["categories_id"]=> string(2) "49" ["pi"]=> string(2) "43" ["cn"]=> string(16) "Pro Sea Diver 1K" }
array(3) { ["categories_id"]=> string(2) "45" ["pi"]=> string(2) "43" ["cn"]=> string(17) "Jugg V / NOWOĹÄ" }

Nie wiem dlaczego zagnieżdżona pętla wykonuje się tylko na jednym cyklu, jeśli druga i trzecia tablica również spełnia warunek tj. klucz 'pi' posiada wartość '43'.

Całość mam do zapytania SQL

$exportSQL = "SELECT c.categories_id, c.parent_id AS pi, cd.categories_name AS cn
FROM categories c
LEFT JOIN categories_description cd
ON c.categories_id = cd.categories_id
WHERE cd.language_id = 2";
0

musisz dac

while ($exportList[] = tep_db_fetch_array($exportQuery)) 

1 użytkowników online, w tym zalogowanych: 0, gości: 1