HatoL
Профессор
- Регистрация
- 5 Фев 2008
- Сообщения
- 206
- Реакции
- 36
- Автор темы
- #1
Пишу скрипт который должен вывести значение поля `text` из таблицы `ranks`. Я недавно начал изучать MySQL, но слышал, что каждый SELECT в запросе отрицательно влияет на производительность, поэтому хотел решить задачу одним запросом (без вложенности). Про то, что в запросе можно каким-то образом связать несколько таблиц я узнал совсем недавно и то, это было только на примере без его разбора. Решил написать сначала несколько запросов, а потом попытаться сделать из них один. Вот решение с несколькими запросами:
Потом, смотря на тот пример, я попытался выполнить эту же задачу одним запросом:
Но я не понимаю как работает этот запрос! Да, он работает, и даже быстрее чем первый вариант (раза в три), но логику запроса я понять не могу. Например откуда SQL знает, что надо выбирать значение `player_id`, чтобы при этом `ggcacc` было равно тому, что ввел пользователь? Ведь в запросе написано `access`.`player_id` = `userlist`.`player_id`, а намека на то, что на `player_id` надо смотреть, ориентируюясь на значение поля `ggcacc` нигде нет. Сложно все это...
PHP:
$query_1 = mysql_query ('SELECT `player_id` FROM `userlist` WHERE `ggcacc` = ' . '\'' . RIHL_PLAYER_NAME . '\'');
$result_1 = mysql_fetch_assoc ($query_1);
$query_2 = mysql_query ('SELECT `status` FROM `access` WHERE `player_id` = ' . '\'' . $result_1['player_id'] . '\'');
$result_2 = mysql_fetch_assoc ($query_2);
$query_3 = mysql_query ('SELECT `text` FROM `ranks` WHERE `rank_id` = ' . '\'' . $result_2['status'] . '\'');
$result = mysql_fetch_assoc ($query_3);
return $result['text'];
PHP:
$result = mysql_fetch_assoc(mysql_query('SELECT `ranks`.`text` FROM `userlist` , `access` , `ranks` WHERE
`userlist`.`ggcacc` = ' . '\'' . RIHL_PLAYER_NAME . '\' AND
`access`.`player_id` = `userlist`.`player_id` AND
`ranks`.`rank_id` = `access`.`status`'));
return $result['text'];