Допустим, есть 2 таблицы - 'table1' и 'table2'. В таблице 'table1' есть поля 'id' (primary key) и 'nickname', а в 'table2' есть поле 'uid'. 'table1' и 'table2' связаны по полям 'id' и 'uid' соответственно.
Вопрос: как отсортировать данные из 'table2' по полю 'nickname' (если это вообще возможно одним запросом) ?
Подскажите пожалуйста, кто знает!
Спустя 1 час, 4 минуты, 4 секунды (12.10.2010 - 20:58) sergeiss написал(а):
А какие свои мысли по этому поводу?
Спустя 13 минут, 21 секунда (12.10.2010 - 21:11) Invis1ble написал(а):
Да особо никаких, я в SQL плохо соображаю. Как вообще сортировка делается знаю (в смысле в пределах одной таблицы), а вот в данном случае вообще без понятия.. И в гугле не знаю как грамотно сформулировать вопрос..
Спустя 1 минута, 4 секунды (12.10.2010 - 21:13) Basili4 написал(а):
подскажу
ORDER BY
ORDER BY
Спустя 2 минуты, 28 секунд (12.10.2010 - 21:15) Invis1ble написал(а):
Про ORDER BY я в курсе.. Подредактировал предыдущий свой пост
Спустя 16 минут, 24 секунды (12.10.2010 - 21:31) sergeiss написал(а):
Invis1ble - давай опредлимся о порядке действий. Прежде чем сортировать, надо получить объект для сортировки. То есть, надо сделать выборку. Которую ты будешь сортировать.
Где она, эта выборка-то? Ты уж определись с этим, а потом поговорим о том, КАК это сортировать.
Где она, эта выборка-то? Ты уж определись с этим, а потом поговорим о том, КАК это сортировать.
Спустя 12 минут, 26 секунд (12.10.2010 - 21:44) Invis1ble написал(а):
sergeiss
Что ты этим хотел сказать? Одним запросом это сделать невозможно, я правильно тебя понял?
Что ты этим хотел сказать? Одним запросом это сделать невозможно, я правильно тебя понял?
Спустя 8 минут, 5 секунд (12.10.2010 - 21:52) arvitaly написал(а):
select * from table1 inner join table2 on id=uid order by nickname asc
Спустя 52 секунды (12.10.2010 - 21:53) Invis1ble написал(а):
sergeiss
токо таким макаром получается можно это сделать?
$query = 'SELECT `id` FROM `table1` ORDER BY `nickname`';
$result = mysql_query($query, $dblink);
while ($row = mysql_fetch_assoc($result))
{
$query = 'SELECT * FROM `table2` WHERE `uid`=' . $row['id'];
$result2 = mysql_query($query, $dblink);
$data[] = mysql_fetch_assoc($result2);
}
токо таким макаром получается можно это сделать?
Спустя 1 минута, 19 секунд (12.10.2010 - 21:54) Invis1ble написал(а):
arvitaly
щас попробую
щас попробую
Спустя 7 минут, 17 секунд (12.10.2010 - 22:01) sergeiss написал(а):
Цитата (Invis1ble @ 12.10.2010 - 22:44) |
Что ты этим хотел сказать? Одним запросом это сделать невозможно, я правильно тебя понял? |
Я хотел сказать только то, что понятие "сортировка" применимо только к запросу. Не более того. Вот когда будет запрос, тогда и будет что сортировать.
То, что тебе написал arvitaly, может и не соответствовать твоим потребностям. Потому что ты пока даже не озвучил, ЧТО ЗА ДАННЫЕ ТЫ ХОЧЕШЬ ПОЛУЧИТЬ.
PS. Ну вот смотри... Допустим, ты спросишь "а как лучше пожарить грибы?". Вполне естественно будет узнать, а что же за грибы такие? И тут вдруг выяснится, что ты даже их не собрал. А не все грибы можно жарить. Не все грибы вообще съедобные. Некоторые вообще не жарят, а едят сырыми (типа "веселушек" - сам не пробовал, только слышал ).
Поэтому вполне естественным будет встречный вопрос: а ты грибы-то собери сначала, а потом уж и спрашивай.
Спустя 9 минут, 34 секунды (12.10.2010 - 22:11) arvitaly написал(а):
Invis1ble,
на будущее, для решения задачи необходимо несколько условий:
1. Исходные данные
2. Конечные данные
3. Неподходящие пути решения (необязательно, но в процессе появляется)
4. Доп. условия (optional)
У вас только структура бд, но нет ни начальных данных, ни конечных
на будущее, для решения задачи необходимо несколько условий:
1. Исходные данные
2. Конечные данные
3. Неподходящие пути решения (необязательно, но в процессе появляется)
4. Доп. условия (optional)
У вас только структура бд, но нет ни начальных данных, ни конечных
Спустя 14 часов, 29 минут, 5 секунд (13.10.2010 - 12:40) Invis1ble написал(а):
arvitaly
Цитата |
1. Исходные данные 2. Конечные данные 3. Неподходящие пути решения (необязательно, но в процессе появляется) 4. Доп. условия (optional) |
не понял, к чему это нужно, вроде все условия задачи уже изложил, просто немного упростил по сравнению с реальным скриптом..
sergeiss, arvitaly
В моем случае есть такой запрос:
$query = 'SELECT *где $sort_params формируется в зависимости от выбранного select'a в форме и имеет например такой вид:
FROM `topics` .
ORDER BY `is_fixed` DESC,' . $sort_params . '
LIMIT ' . $offset . ',' . $limit;
$sort_params = '`updated_at` DESC';
Сортировка в данном случае идет только по полям таблицы topics, но есть еще таблица users - в ней есть поля id и nickname (users и topics связаны по полям id и author_id соответственно), так вот я хочу чтоб данные из topics сортировались по полю nickname из users.
Ну вот так, вроде все условия задачи изложил...
Спустя 5 часов, 33 минуты (13.10.2010 - 18:13) arvitaly написал(а):
Ну я же уже написал как можно сделал запрос
Спустя 14 минут, 32 секунды (13.10.2010 - 18:28) Invis1ble написал(а):
arvitaly
я сделал как ты написал - не работает. Такой запрос:
я сделал как ты написал - не работает. Такой запрос:
SELECT *ошибка:
FROM topics INNER JOIN users on `id`=`author_id`
ORDER BY `is_fixed` DESC,`nickname` DESC
LIMIT 0,5
Column 'id' in on clause is ambiguous
Спустя 7 минут, 30 секунд (13.10.2010 - 18:35) arvitaly написал(а):
SELECT *
FROM topics INNER JOIN users on users.id=author_id
ORDER BY `is_fixed` DESC,`nickname` DESC
LIMIT 0,5
Спустя 7 минут, 51 секунда (13.10.2010 - 18:43) Invis1ble написал(а):
arvitaly
все, понял свою ошибку, когда перевел текст ошибки (каламбур ).. Все работате теперь,
Всем спасибо!
все, понял свою ошибку, когда перевел текст ошибки (каламбур ).. Все работате теперь,
Всем спасибо!
Спустя 49 минут, 54 секунды (13.10.2010 - 19:33) Invis1ble написал(а):
arvitaly
вот возник еще вопрос по теме, делаю такой запрос:
т.е. хочу отсортировать данные из таблицы topics согласно колличеству сообщений в каждом топике (в таблице comments поле topic_id соответствует полю id в таблице topics).. Не получается, подскажи как правильно плиз
вот возник еще вопрос по теме, делаю такой запрос:
SELECT *,COUNT(*)
FROM topics
INNER JOIN comments ON `topic_id`=topics.`id`
ORDER BY `is_fixed` DESC,COUNT(*) DESC
LIMIT 0,5
т.е. хочу отсортировать данные из таблицы topics согласно колличеству сообщений в каждом топике (в таблице comments поле topic_id соответствует полю id в таблице topics).. Не получается, подскажи как правильно плиз
Спустя 25 минут, 21 секунда (13.10.2010 - 19:58) arvitaly написал(а):
Цитата |
topics id 1 2 3 comments topic_id 1 1 1 2 2 3 3 3 |
Если вы про это, то
SELECT * FROM topics LEFT join (SELECT COUNT(*) AS cnt,topic_id FROM comments GROUP BY topic_id) as c ON c.topic_id = topics.id ORDER BY c.cnt desc
Спустя 14 минут, 19 секунд (13.10.2010 - 20:12) Invis1ble написал(а):
arvitaly
Да, ты меня правильно понял. Круто! Все работает! Еще раз спасибо!
Да, ты меня правильно понял. Круто! Все работает! Еще раз спасибо!
_____________
Профессиональная разработка на заказ
Я на GitHub | второй профиль