mysql php 5 присоединяется к таблице - PullRequest
0 голосов
/ 24 октября 2011

Все еще изучаем соединения MySQL в данный момент.На одной странице моего сайта он показывает инвентарь, и ему нужно собрать данные из 5 таблиц, чтобы сформировать его.

В настоящее время я делаю это: (да, это дрянной)

$sql_result4 = mysql_query("SELECT * FROM players WHERE id='$id'", $db); 
$rs4 = mysql_fetch_array($sql_result4)

  if ($rs4[firearm] != "") { 
    $sql_result5 = mysql_query("SELECT icon FROM db_firearms WHERE name='$rs4[firearm]'", $db); 
    $rs5 = mysql_fetch_array($sql_result5); $firearm_icon=$rs5[icon]; $weap = $rs4[firearm];
    }

  if ($rs4[accessory2] != "") {
    $sql_result5 = mysql_query("SELECT icon FROM db_items WHERE name='$rs4[accessory2]'", $db);
    $rs5 = mysql_fetch_array($sql_result5); $item_icon=$rs5[icon]; $access = $rs4[accessory2]; 
    }

  if ($rs4[vehicle2] != "") { 
    $sql_result5 = mysql_query("SELECT icon FROM db_vehicles WHERE name='$rs4[vehicle2]'", $db); 
    $rs5 = mysql_fetch_array($sql_result5); $veh_icon=$rs5[icon]; $veh = $rs4[vehicle2]; 
    }

  if ($rs4[melee2] != "") {
    $sql_result5 = mysql_query("SELECT icon FROM db_melee WHERE name='$rs4[melee2]'", $db); 
    $rs5 = mysql_fetch_array($sql_result5); $mel_icon=$rs5[icon]; $mel = $rs4[melee2]; 
    }

КакВы видите, это глупо.Я предполагаю, что мне нужно объединить все это в одно, и понятия не имею, с чего начать.

Ответы [ 3 ]

3 голосов
/ 24 октября 2011
SELECT *, db_firearms.icon as firearm_icon, db_items.icon as item_icon, db_vehicles.icon as vehicle_icon, db_melee.icon as melee_icon
FROM players
LEFT JOIN db_firearms  ON (db_firearms.name=firearm)
LEFT JOIN db_items ON (db_items.name=accessory2)
LEFT JOIN db_vehicles ON (db_vehicles.name=vehicle2)
LEFT JOIN db_melee ON (db.melee.name=melee2)
WHERE players.id = $id

Убедитесь, что поле имени проиндексировано во всех таблицах

0 голосов
/ 24 октября 2011

Это не так глупо, как кажется. Я бы изменил только подключенные таблицы-первичные ключи от имени к идентификатору. Таким образом, вы выбираете игрока, и у него есть firearm_id, accessory_id, vehicle_id и так далее. Эти идентификаторы обычно являются числами. Также в этом случае просто добавьте ассоциации многие-ко-многим, если вам нужно.

0 голосов
/ 24 октября 2011

Я советую вам найти лучший способ, чем сделать 4 JOINS.

потому что вы очень сильно умножаете время выполнения.

скажем, у вас есть 1000 строк в каждой таблице (что не много)

Декартово умножение будет 1000 *1000* 1000 *1000* 1000 это 1000000000000000, это размер таблицы, которую сервер должен обработать.

избегайте СОЕДИНЕНИЙ любой ценой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...