Wpis z mikrobloga

#webdev #mysql #sql

Mireczki mam taki problem - tabelka sentences w relacją 1:n do sentencetranslations.
Potrzebuje z bazy danych wybrać ID wszystkich "sentences" które mają do siebie przypisane mniej niż 2 "sentence
translations".

Próbowałem w ten sposób:

SELECT sentences.id,COUNT(sentence_translations.id) AS transCount FROM sentences LEFT OUTER JOIN sentence_translations ON sentences.id = sentence_translations.id GROUP BY sentences.id;
I dostaje faktycznie rezultat z formie "id","transCount" i dane są poprawne, tzn. pokazuje ile dla danej sentencji o danym ID istnieje tłumaczeń. Ale problem jest taki, że potrzebuje do tego dołożyć ORDER, LIMIT do paginacji i dodatkowo wyfiltrować żeby wyszukiwaniu podlegały tylko rekordy które mają mniej niż 2 tłumaczenia.

Problem w tym że dowalenie WHERE transCount < 2 wywala query że nie ma takiej kolumny transCount co same w sobie jest dość logiczne, ale nie wiem jak ten temat ruszyć dalej.

Dodam jeszcze że produkcyjnie ta tabelka będzie miała ponad 500,000 rekordów więc musi być to coś z samym SQLem.

Pomocy :(
  • 9
  • Odpowiedz
SELECT sentences.id,COUNT(sentencetranslations.id) AS transCount FROM sentences LEFT OUTER JOIN sentencetranslations ON sentences.id = sentencetranslations.id HAVING COUNT(sentencetranslatiobs.id)<2 GROUP BY sentences.id;
  • Odpowiedz
@ksiengz: nie przechodzi mi to query..

wersja mysql:
mysql Ver 14.14 Distrib 5.5.50, for debian-linux-gnu (x8664) using readline 6.3

błąd:
mysql> SELECT sentences.id,COUNT(sentence
translations.id) AS transCount FROM sentences LEFT OUTER JOIN sentencetranslations ON sentences.id = sentencetranslations.id HAVING COUNT(sentence_translations.id) < 2 GROUP BY sentences.id;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax
larvaexotech - @ksiengz: nie przechodzi mi to query..

wersja mysql:
mysql Ver 14....

źródło: comment_YCqoaow0cg10ru90WYBs5CGyhq0dUbck.jpg

Pobierz
  • Odpowiedz
@qwertyu: @ksiengz: dzięki serdeczne koledzy. moglibyście tak jakoś przybliżyć jak to będzie działało pod maską?? tzn. czy jak dorzuce tam np. limit 50 to będzie full table scan czy tylko 50 pierwszych sztuk spełniających założenie ilość relacji < 2 ?
  • Odpowiedz