PHP-код, лучший способ получения данных SQL - PullRequest
0 голосов
/ 01 сентября 2011

Мне нужно взять данные из двух таблиц, но я знаю, что есть лучший, более аккуратный способ сделать это. Мне нужен какой-то JOIN?

Я покажу вам свой код, и вы поймете, что я имею в виду:

if ($rs[firearm] != "") {
   $sql_result2 = mysql_query("SELECT * FROM db_firearms WHERE name='$rs[firearm]'", $db);
   $rs2 = mysql_fetch_array($sql_result2);
   $sql_result3 = mysql_query("SELECT * FROM items_firearms WHERE player='$id'", $db);
   $rs3 = mysql_fetch_array($sql_result3);

    if ($rs3[$rs2[shortname]] < 1) {
       mysql_query("UPDATE mobsters SET firearm = '' WHERE id ='$id'");
    }
}

1 Ответ

0 голосов
/ 01 сентября 2011

Этот вопрос ясен, но в вашем примере кода есть много проблем с форматированием, и я не могу дать вам прямой ответ, основываясь на вашем примере кода.

Причина, по которой ваш пример неясен, в том, что ... с чем вы собираетесь присоединиться к столам? Из одной таблицы вы выбираете name='$rs[firearm]', а из другой player='$id'. Вы должны предоставить скрытые данные, такие как $rs, а также $id.

Вы должны обязательно прочитать эти сведения о mysql join и mysql left join . Но я постараюсь дать вам пример, основанный на вашем коде, с фиксированным синтаксисом. (Имейте в виду, что я не являюсь экспертом по соединению mysql, я не тестировал этот код, а также не знаю условий присоединения.) Кроме того, структура системы неясна.

Как я понял, это то, что ваши таблицы делают, правильно?

  • бандиты - Пользователи Таблица
  • items_firearms - Ссылки от пользователей таблицы на элементов таблицы
  • db_firearms - Items table

В общем, мой пример делает это: он будет иметь предварительно загруженное значение $rs из таблицы users . Он проверит, есть ли запись в таблице links и перехватит результат с их таблицей items . Однако, если таблица links или даже таблица items могут возвращать несколько записей, то это не сработает, и вам нужно зациклить результаты более умным способом.

// I can only assume, that $id is the ID of the player
$id = 2;

// Since I dont know the $rs value, then Im going to make some up
$rs = array(
    'id' => 33,
    'firearm' => 'famas'
);

if ($rs['firearm']) {
    $result = mysql_fetch_array(mysql_query("SELECT ifa.*, dbfa.* FROM `items_firearms` AS `ifa` LEFT JOIN `db_firearms` AS `dbfa` ON `ifa.shortname` = `dbfa.shortname` WHERE `ifa.player` = '$id'"));
    if ($result['id']) {
        mysql_query("UPDATE `mobsters` SET `firearm` = '' WHERE `id` = '$id'", $db);
    }
}

Довольно ясно, что вы новичок в PHP и mysql .. Поэтому я думаю, что вам, вероятно, следует отредактировать свой вопрос и поговорить о своей более высокой цели. Кратко упомяните, какое приложение вы создаете? Что вы пытаетесь сделать с запросами MySQL? Может быть, предоставить структуру таблицы ваших таблиц MySQL ..? Я уверен, что вы вернете свои вопросы в нормальное русло, а также мы поможем вам намного лучше.

ПРИМЕЧАНИЯ

  • Вы должны заключать в кавычки следующие типы переменных: $rs[firearm] -> $rs['firearm']
  • Если вы хотите проверить, что ваш $ rs ['firearm'] равен чему-то, то есть лучший способ, чем $rs[firearm] != "". Самым простым является if ($rs['firearm']) {echo 'foo';}, но он выдаст уведомление при появлении всех сообщений об ошибках в режиме. Вы можете использовать isset() и empty(), но имейте в виду, что isset() проверяет, установлена ​​ли переменная. Значение, четное если его ложь, то он был установлен. empty() реагирует на неопределенную и пустую переменную одинаково, без каких-либо сообщений.
  • Кроме того, "" означает NULL, поэтому, если вам даже нужно использовать "", тогда используйте NULL вместо ... намного более аккуратного способа ..
  • Я настоятельно рекомендую использовать класс mysql. Вы можете понять основы этой идеи из этого ответа . Это сделает все намного проще для вас. Кроме того, класс mysql является обязательным при работе с динамическими приложениями.
  • if ($rs3[$rs2[shortname]] < 1) { .. не имеет смысла .. Хотите проверить, является ли значение пустым? Тогда (просто): if (!$rs3[$rs2[shortname]]) { .. и очень строгий стандарт: if (empty($rs3[$rs2[shortname]])) { ..
  • Также вы должны процитировать ваши sql запросы, см. Мои примеры выше.
  • В последнем запросе mysql отсутствует $ db?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...