Это что-то на грани практичности, но я подхожу к этой проблеме больше как упражнение "делать все правильно".
Я бы сделал простой выбор каждой таблицы и вставил в массив:
$query1 = "SELECT * FROM cities";
$query2 = "SELECT * FROM prices";
$results1 = mysql_query( $query1 );
$results2 = mysql_query( $query2 );
while( $rows = mysql_fetch_array( $results1 ) ) $cities[] = $row['name'];
while( $rows = mysql_fetch_array( $results2 ) ) $prices[] = array(
$row['city1_id'],
$row['city2_id'],
$row['name']
);
Затем я бы использовал это для динамического создания двух списков JavaScript:
$java_array1 = "var Cities = new Array;\n";
foreach( $cities as $key=>$city ) $java_array1 .= "Cities[$key] = \"$city\";\n";
$java_array2 = "var Prices = new Array;\n";
foreach( $cities as $key=>$price ) $java_array2 .= "Prices[$key] = new Array(
\"{$price[0]}\",
\"{$price[1]}\",
\"{$price[2]}\",
);\n";
Затем я выведу таблицу с тщательно созданными идентификаторами для каждой ячейки. Я использовал бы код, очень похожий на код в первом ответе, но я бы дал каждой ячейке уникальный идентификатор "cell-<row>-<col>"
.
Последнее, что я хотел бы сделать, это поднять некоторый onload
javascript, который заполнил бы таблицу, используя соответствующие пары. Мой javascript довольно ржавый, но он будет выглядеть примерно так (ПРИМЕЧАНИЕ: псевдокод следует):
n = 1;
for( var i in cities )
{
// set city names on the diagonal
document.getElementById( 'cell-'&i&'-'&i ).innerHTML = names[i];
n = n + 1;
}
for( var j in prices )
{
// use the city IDs in the prices array (see earlier code initializing
// prices array) to place the prices
document.getElementById( 'cell-'&prices[1]&'-'&prices[2] ).innerHTML = prices[0];
}
Я почти наверняка испортил часть этого javascript; используйте на свой страх и риск.
Это намного сложнее, чем простой ответ, приведенный выше, но это единственный способ, который я могу придумать, чтобы он имел «смысл». В основном, с помощью этого метода вы размещаете все, где оно должно , и вам не нужно беспокоиться о нечетных таблицах и странных выборках.