Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> JOIN MYSQL zapytanie do bazy danych
seba199696
post 12.03.2012, 17:02:41
Post #1





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 4.01.2011

Ostrzeżenie: (20%)
X----


Pomoże mi ktoś zbudować zapytanie do bazdy danych mysql? (używam do tego JOIN ale nie chce wyjść) sad.gif
tabela1:

id | name |
1 sss
2 lllll

tabela2:

tab_id | name | code |
1 ppp 1
2 ffff 0

IF ID = TAB_ID TO WHERE CODE 1

wtedy pokaż name z tabela2

a jeżeli się id nie równa z tab_id to pokaż name z tabeli1

prosze o pomoc
Go to the top of the page
+Quote Post
em1X
post 12.03.2012, 17:43:27
Post #2





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


nic nie rozumiem z Twojego pytania, więc zgaduję:

select t1.name, t2.name from tabela1 t1 inner join tabela2 t2 on t1.id=t2.tab_id where t2.code=1

co to ma z PHP wspólnego?

Ten post edytował em1X 12.03.2012, 17:43:54


--------------------
eh, co polska wódka to polska wódka
Go to the top of the page
+Quote Post
seba199696
post 12.03.2012, 20:52:13
Post #3





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 4.01.2011

Ostrzeżenie: (20%)
X----


tabela: "module"


tabela "lang"


I chcę wyświetlić tłumaczenie pola name. Tylko jak nie ma tłumaczenia dla np. id: 2 (module) to wyświetl name bez tłumaczenia

coś takiego:

Home Site
Kontakt
Zdjecia

napisałem sobie coś takiego ale wyświetla mi tylko HOME SITE
  1. SELECT * FROM module JOIN lang WHERE module.id = lang.id_lang AND lang = 2


?

wie ktoś? sad.gif

Ten post edytował seba199696 12.03.2012, 20:52:33
Go to the top of the page
+Quote Post
gothye
post 12.03.2012, 21:35:52
Post #4





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


  1. SELECT * FROM tabela2 AS t2 LEFT JOIN tabela1 AS t1 ON t1.id= t2.tab_id WHERE t2.code = 1


--------------------
Nie udzielam pomocy poprzez PW
Go to the top of the page
+Quote Post
seba199696
post 12.03.2012, 21:40:37
Post #5





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 4.01.2011

Ostrzeżenie: (20%)
X----


nie działa sad.gif dokładnie tak: Zakładając ze w bazie danych nie zawsze bedzie tlumaczenie dla każdego name w jezyku uzywanym w tym momencie przez uzytkownika, jak moznaby sformulowac zapytanie do SQLa tak aby przy wyciąganiu name dla danej kategorii wyciągało wszystkie name w wersji jezykowej uzytkownika lub w wersji jezyka domyslnego jezeli poprzednie sie nie powiodlo?

Ten post edytował seba199696 12.03.2012, 21:43:21
Go to the top of the page
+Quote Post
gothye
post 12.03.2012, 21:42:22
Post #6





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


więc wykonaj

SELECT * FROM tabela1,tabela2 ,bez korzystania z JOIN ,za to korzystając z IF


--------------------
Nie udzielam pomocy poprzez PW
Go to the top of the page
+Quote Post
seba199696
post 12.03.2012, 21:44:32
Post #7





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 4.01.2011

Ostrzeżenie: (20%)
X----


wolałbym w jednym zapytaniu nie używając if
Go to the top of the page
+Quote Post
gothye
post 12.03.2012, 22:30:59
Post #8





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


pisząc IF miałem na myśli Mysql'owy IF

http://dev.mysql.com/doc/refman/5.0/en/if-statement.html

Na przyszłość mógłbyś wykazać więcej chęci do wyszukiwania informacji samemu , nie licz że ktoś Ci poda gotowe zapytanie na tacy thumbsdownsmileyanim.gif


--------------------
Nie udzielam pomocy poprzez PW
Go to the top of the page
+Quote Post
cudny
post 12.03.2012, 23:00:56
Post #9





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


  1. SELECT IFNULL(lang.name,module.name) FROM module LEFT JOIN lang ON module.id= lang.id_lang WHERE module.id =1


Poproszę pomógł za gotowca

Cytat(gothye @ 12.03.2012, 21:42:22 ) *
więc wykonaj

SELECT * FROM tabela1,tabela2 ,bez korzystania z JOIN ,za to korzystając z IF



Cytat(gothye @ 12.03.2012, 22:30:59 ) *
pisząc IF miałem na myśli Mysql'owy IF

Chętnie zobaczę takie rozwiązanie

Cytat
Na przyszłość mógłbyś wykazać więcej chęci do wyszukiwania informacji samemu , nie licz że ktoś Ci poda gotowe zapytanie na tacy thumbsdownsmileyanim.gif

Zajęło mi to 10 sek. wię ja podam, czemu nie smile.gif

Cytat
szukałem nie umiem tego napisać więc się pytam tak? w końcu od tego jest forum. Przypuszczam że sam nie wiesz jak to napisać ;]

A czemu jesteś dla kolegi nie miły ? Chciał pomóc...

Acha... jeszcze taka rada - pole id_lang nazwał bym raczej id_module, a najlepiej FK_id_module i ustaił bym na nim klucz obcy do module.id - poczytaj o kluczach obcych (FOREIGN KEY) - w mysql są dostępne w silniku innoDB (myisam odchodzi powoli do lamusa)

Ten post edytował cudny 12.03.2012, 23:04:45


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
seba199696
post 12.03.2012, 23:37:00
Post #10





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 4.01.2011

Ostrzeżenie: (20%)
X----


Nie działa sad.gif nic nie wyświetla proszę sprawdź to jeszcze raz
Go to the top of the page
+Quote Post
cudny
post 13.03.2012, 09:57:13
Post #11





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


musi dizałać, może nie masz nic w bazie. Sprawdź czy masz jakiś wpis w bazie module.id =1 jeśli nie to wywal where i zobacz co wyświetla


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
seba199696
post 13.03.2012, 17:38:47
Post #12





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 4.01.2011

Ostrzeżenie: (20%)
X----


Sprawdziłem to za pomocą SQL w phpmyadmin wynik pozytywny zwróciło 3 rekordy tak jak chciałem.
  1. SELECT IFNULL( lang.name, module.name )
  2. FROM module
  3. LEFT JOIN lang ON module.id = lang.id_lang
  4. AND lang.lang =2


wynik:
Wygenerowany przez: phpM\Admin 3.3.9 / M\SQL 5.5.8
Zapytanie SQL: SELECT IFNULL( lang.name, module.name ) FROM module LEFT JOIN lang ON
module.id = lang.id_lang AND lang.lang =2 LIMIT 0, 30 ;
Rekordów: 3

i teraz w pliku robię:

  1. <?php
  2. try
  3. {
  4. $pdo = new PDO('mysql:host=localhost;dbname=cms', '******', '*****');
  5. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  6.  
  7. $stmt = $pdo -> query('
  8. SELECT IFNULL( lang.name, module.name )
  9. FROM module
  10. LEFT JOIN lang ON module.id = lang.id_lang
  11. AND lang.lang =2
  12. ');
  13.  
  14. while($row = $stmt -> fetch())
  15. {
  16. echo $row['name'];
  17. }
  18. $stmt -> closeCursor();
  19. }
  20. catch(PDOException $e)
  21. {
  22. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  23. }
  24. ?>


wynik:
Notice: Undefined index: name in C:\xampp\htdocs\cms\query.php on line 19

Notice: Undefined index: name in C:\xampp\htdocs\cms\query.php on line 19

Notice: Undefined index: name in C:\xampp\htdocs\cms\query.php on line 19

dlaczego tego nie wyświetla?

Ten post edytował seba199696 13.03.2012, 17:44:37
Go to the top of the page
+Quote Post
cudny
post 13.03.2012, 20:09:16
Post #13





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


OMG biggrin.gif

  1. SELECT IFNULL( lang.name, module.name ) AS name
  2. FROM module
  3. LEFT JOIN lang ON module.id = lang.id_lang
  4. AND lang.lang =2


Miałeś dać pomógł biggrin.gif



I jeszcze jedno:

  1. $stmt = $pdo -> query('
  2. SELECT IFNULL( lang.name, module.name )
  3. FROM module
  4. LEFT JOIN lang ON module.id = lang.id_lang
  5. AND lang.lang =2
  6. ');

Nie można w ten sposód dawać zapytania do pdo - mogą powstawać błędy.
Nie używaj znaków końca linii:
  1. $stmt = $pdo -> query(
  2. 'SELECT IFNULL( lang.name, module.name ) '.
  3. 'FROM module '.
  4. 'LEFT JOIN lang ON module.id = lang.id_lang '.
  5. 'AND lang.lang =2'
  6. ');


Ten post edytował cudny 13.03.2012, 20:13:34


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
seba199696
post 13.03.2012, 20:30:25
Post #14





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 4.01.2011

Ostrzeżenie: (20%)
X----


Masz te twoje pomógł tongue.gif smile.gif Dziękuję za pomoc, pozdrawiam
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2025 - 16:46