Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: JOIN MYSQL zapytanie do bazy danych
Forum PHP.pl > Forum > PHP
seba199696
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
em1X
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?
seba199696
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
gothye
  1. SELECT * FROM tabela2 AS t2 LEFT JOIN tabela1 AS t1 ON t1.id= t2.tab_id WHERE t2.code = 1
seba199696
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?
gothye
więc wykonaj

SELECT * FROM tabela1,tabela2 ,bez korzystania z JOIN ,za to korzystając z IF
seba199696
wolałbym w jednym zapytaniu nie używając if
gothye
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
cudny
  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)
seba199696
Nie działa sad.gif nic nie wyświetla proszę sprawdź to jeszcze raz
cudny
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
seba199696
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?
cudny
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. ');
seba199696
Masz te twoje pomógł tongue.gif smile.gif Dziękuję za pomoc, pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.