Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] zapytanie z dwoma tablicami
unsec
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 5.08.2011

Ostrzeżenie: (0%)
-----


Witam, prosze o pomoc w następującym problemie:

1. mamy dwie tablice

->tablica '$table_name' zawierająca dane dotyczące autorów publikacji

Kod
id, number, surname

gdzie w kolumnie 'number' podany jest kod numeryczny przypisany do danego autora (np. 10287), a w kolumnie 'surname' jego nazwisko

->tablica '$table_name2' zawierająca dane pozycji (publikacji)

Kod
id, author, language

gdzie w kolumnie 'author' podane są kody numeryczne autorów danej publikacji (oddzielone przecinkiem jeśli więcej niż 1), a w kolumnie 'language' podany jest kod języka w którym opublikowany jest artykuł (np. dla języka angielskiego to 826 a dla polskiego to 616, zawsze pojedyńczy kod)

2. w wyniku zapytania do bazy chciałbym uzyskać listę autorów ale tylko tych którzy 'popełnili' artykuł w zadanym języku. Dobrze by też było uzyskać ich ilość.

3. wykreowałem poniższe zapytanie

Kod
query("SELECT `$table_name`.*                  
                             FROM `$table_name`, `$table_name2`      
                             WHERE `$table_name`.number = `$table_name2`.author AND `$table_name2`.language = '$language'  
                             GROUP BY `$table_name`.number                                      
                             ORDER BY `$table_name`.surname ASC  
                            ");


które działa poprawnie jeśli jest tylko jeden autor publikacji, przy kilku już nie nie. Wiem dlaczego tak się dzieje ale nie potrafię skonstruować właściwego zapytania aby uwzględniło także wpisy w których jest więcej autorów niż 1.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
unsec
post
Post #2





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 5.08.2011

Ostrzeżenie: (0%)
-----


@trueblue - serdeczne dzięki

dodałem jeszcze

Kod
GROUP BY ...


i w efekcie otrzymałem to samo co przy kodzie

Kod
query("SELECT `$table_name`.*                      
                            FROM `$table_name`
                            ORDER BY surname ASC            
                            ");



czyli listing WSZYSTKICH autorów bez względu czy napisał czy nie napisał.

a że potem mam zapytanie z COUNT to widzę ile razy występuje każdy autor. No i z Twoim WHERE wyświetla mi także autorów z (0), czyli takich których być nie powinno.

Natomiast po dodaniu do Twojego WHERE

Kod
AND `$table_name2`.language = '$language'


znikają mi "(0) autorzy". Co, teoretycznie jest logiczne, ale myślałem że sam CONCAT wystarczy do odsiewu a "language" bedzie tylko zabezpieczeniem dla danego języka.

--------------------

Autorów mam już sporo i "na oko" nie wiem czy wszystko działa poprawnie. Postanowiłem rzecz przetestować.
Usunąłem "abezpieczenie "AND language". Wprowadziłem do bazy nowego autora "Test". Teoretycznie, powinno go wyświetlić jako "(0) Test" ale nie wyświetla go w ogóle.

Ten post edytował unsec 19.11.2014, 20:46:14
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 00:38