У меня есть две таблицысмесительные две таблицы вместе
db2:
id, db1id, text, count_db1
DB1:
id, text
db2 выше создается
SELECT *, COUNT(`db1id`) AS count_db1 FROM `db2` GROUP BY `db1id` ORDER BY count_db1 DESC
поэтому последний столбец добавлено, и вся продукция сортируется по убыванию nt_db1.
db1ids являются идентификаторами db1. Я хочу до
SELECT * FROM db1
упорядочено по значению count_db1 в db1. Если id db1 не существует в db2 как db1id, он должен быть добавлен в конец списка (т. Е. Присвоено значение 0 для count_db1).
пример:
db2:
id, db1id, text, count_db1
1,4,hello,5
2,4,hello,5
3,4,ho,5
5,4,yeah,5
6,4,no,5
4,3,no,1
db1:
id, text
3, yeahright
4, whatever
Таким образом, в db2 db1id 4 происходит в 5 раз, db1id 3 происходит 1 раз. Поэтому заказать записи из DB1 таким образом, что идентификатор 4 предшествует идентификатор 3. Результат должен быть:
- независимо
- yeahright
вы избили меня на 10 секунд ** И ** сделали sqlfiddle! +1 – luksch
Как мне создать это в следующий раз? –
@ user2348735 Краткое описание; a 'db1 LEFT JOIN db2' означает, что идентификатор должен существовать в' db1', но не обязательно в 'db2'. Нормальный 'JOIN' должен был удалить все строки, которые не существуют в обоих. «GROUP BY» говорит, что вы хотите получить результат за комбинацию 'db1.id' /' db1.text' и порядки 'ORDER BY COUNT (db2.id) DESC' на количество строк в' db2', которые в каждой группе только «GROUP BY». 'DESC' означает только убывающий, от высокого до низкого. –