![]() |
Два вопроса по MYSQL
1. Как узнать, сколько queries было запущено на данной странице?
2. Если я хочу сделать выборку инфы из одной таблицы, но упорядочить по качеству значения из другой таблицы возможно ли это? Пояснение: $DB_site->query("SELECT * FROM portal_articles ORDER BY ----TUT PROBLEMA ----") В таблице есть столбик sectionid Есть таблица portal_sections со столбиками sectionid, sectiontitle. Так вот, можно ли использую только тот первый query упорядочить результат по sectiontitle из второй таблицы? |
Цитата:
Цитата:
|
Цитата:
Выбираеш поля из двух таблиц и устанавливаеш порядок по любому из выбранных полей. |
SamJa
Примерчик плз. Как я могу выбрать поля их ДВУХ таблиц? И где я могу почитать про LEFT JOIN? |
Наверное здесь
_http://www.mysql.ru/docs/man/LEFT_JOIN_optimisation.html |
Цитата:
|
Ну, мне нужен конкретный пример.
По обеим ссылкам написано не на языке для учащихся, а на чем-то более сложном.. |
$DB_site->query("SELECT pa.* FROM portal_articles pa, portal_sections ps WHERE pa.sectionid = ps.sectionid ORDER BY ps.sectiontitle")
|
is_absent
А с пошаговым объяснением? Что делает точка? Почему portal_articles pa - почему там пробел? Что такое через запятую? Выбрать столбик pa из portal_articles и ps из portal_sections? Но что за звездочка? Новый вопрос: какое среднее допустимое колво query на одну страницу (я понимаю, что чем меньше тем лучше). |
Что такое 'pa' и что такое 'ps'??
|
Neo
pa.* -- выбрать все поля из таблички pa pa и ps -- альясы (короткие имена) для таблиц, чтобы не писать их полностью. среднее число запросов... вообще рекомендуемое время ответа сервера в браузер (в какой-то книжке прочитал, кажется "Не заставляйте меня думать") 1 -3 секунды. вот и считай :) укладываешься -- замечательно. нет -- оптимизируй запросы |
Цитата:
portal_articles pa - это полное имя и сокращение (альяс). Через запятую пишутся имена полей или именя таблиц. |
То есть,
запрос Цитата:
Хм. Это не совсем то. А что если мне надо следующее: Выбрать всю инфу из таблицы portal_articles, но в результат вложить также user.username и user.realname? А что если сделать так: SELECT pa.*,user.username,user.realname FROM portal_articles pa, user ORDER BY pa.patitle? Это будет работать как ожидается? Т.е. мне нужно, чтобы поля из таблицы user Добавлялись только к тем строкам, которые совпали с условием, но чтобы лишние строки из таблицы user не выбирались? |
Да, вроде работает. Правда немножно измененно. так что, на все, что до этой строки, можете не отвечать.
Кое что посложнее: Если я хочу дать запрос, который выдаст мне список всех portal_articles и portal_sections.sectiontitle WHERE ps.sectionid = pa.sectionid? Так, чтобы: в $result[data] были portal_articles, а в $result[sectiontitle] было sections.sectiontitle. Наверное, это уже невозможно? Т.е. как совместить следующие два запроса: $result[data] = $DB_site->query("SELECT * FROM portal_articles WHERE groupid='".$groupid."'"); $result[title] = $DB_site->query("SELECT grouptitle FROM portal_groups WHERE groupid='".$groupid."'"); Да, кстати. С помощью предыдущей инфы я оптимизировал мой сайт на 2 запроса :)))) |
Neo
$DB_site->query("SELECT pa.*, grouptitle FROM portal_articles pa, portal_groups pg WHERE pg.groupid=pa.groupid and pa.groupid='".$groupid."'"); по нужным массивам и сам разложишь :) Можно совет? Купи себе Дейта "Основы баз данных". Очень помогает, при решении подобных проблем. По собственному опыту знаю. Изучал базы данных с него. Еще с третьего издания. Сейчас должно быть седьмое (или восьмое). |
is_absent
Цитата:
Цитата:
|
Цитата:
|
is_absent
Хм... понятно. Значит, сделать один запрос так, чтобы он вывел часть результата в одно место, а часть в другое - нельзя? |
Итак, это:
$result = mysql_fetch_assoc($DB_site->query("SELECT pa.*,user.username FROM portal_articles pa, user WHERE user.userid = pa.userid ORDER BY pa.articleid DESC LIMIT 1")) Не совсем так работает, как хотелось бы. Допустим, у меня в базе статья с пользователем у которого ID - '-1' - т.е. без пользователя. В результате данного запроса, такие статьи просто пропускаются. А как сделать чтобы они не пропускались, а выводили для поля user значение "NaN"? Т.е, чтобы результат был в таких случаях примерно такой: $result { [articleid] => int "1", [pagetext] => string(12) "Pagetext....", [userid] => string(2) "-1", [username] => string(3) "NaN", } Это все можно сделать, запрашивая для каждого article отдельно инфу о юзере. Но это - дополнительный запрос... Хотелось бы избежать. Помогите пожалуйста. Спасибо, Neo |
странно ты как то делаешь...
обычно: $res = mysql_query //проверка (например на кол-во возвращенным записей) while($row = mysql_fetch_assoc($res)) { //обработка $row <- ассоциативный массив } |
Цитата:
|
Хорошо.
Так что же лучше? $DB_site->query("SELECT sectiontitle FROM sections WHERE secid=$secid"); $DB_site->query("SELECT * FROM articles WHERE secid=$secid"); или $DB_site->query("SELECT s.sectiontitle, a.* FROM sections s,articles a WHERE s.secid=a.secid AND s.secid=$secid"); ? А про left join я щас почитаю еще раз. Хотя в прошлый раз я так ничего и не понял :( Вроде понял. $result = $DB_site->query("SELECT na.* FROM neolit_articles na LEFT JOIN user ON (user.userid=na.userid) WHERE na.secid='18'"); но, это не возвращает поле user.username....... как его туда добавить? |
select na.*, user.username.....
|
is_absent
Спасибо. Все получилось. :) |
| Часовой пояс GMT +4, время: 15:38. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.