Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> JOIN MYSQL zapytanie do bazy danych
seba199696
post
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ść) (IMG:style_emoticons/default/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
 
Start new topic
Odpowiedzi (1 - 13)
em1X
post
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
Go to the top of the page
+Quote Post
seba199696
post
Post #3





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

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


tabela: "module"
(IMG:http://www.wrzuc.net.pl/images/module.png)

tabela "lang"
(IMG:http://www.wrzuc.net.pl/images/lang.png)

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ś? (IMG:style_emoticons/default/sad.gif)

Ten post edytował seba199696 12.03.2012, 20:52:33
Go to the top of the page
+Quote Post
gothye
post
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
Go to the top of the page
+Quote Post
seba199696
post
Post #5





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

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


nie działa (IMG:style_emoticons/default/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
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
Go to the top of the page
+Quote Post
seba199696
post
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
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 (IMG:style_emoticons/default/thumbsdownsmileyanim.gif)
Go to the top of the page
+Quote Post
cudny
post
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 (IMG:style_emoticons/default/thumbsdownsmileyanim.gif)

Zajęło mi to 10 sek. wię ja podam, czemu nie (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
seba199696
post
Post #10





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

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


Nie działa (IMG:style_emoticons/default/sad.gif) nic nie wyświetla proszę sprawdź to jeszcze raz
Go to the top of the page
+Quote Post
cudny
post
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
Go to the top of the page
+Quote Post
seba199696
post
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
Post #13





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

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


OMG (IMG:style_emoticons/default/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ł (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
seba199696
post
Post #14





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

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


Masz te twoje pomógł (IMG:style_emoticons/default/tongue.gif) (IMG:style_emoticons/default/smile.gif) Dziękuję za pomoc, pozdrawiam
Go to the top of the page
+Quote Post

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: 23.08.2025 - 06:53