Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie z bazy wyniku oraz wyświetlenie
Forum PHP.pl > Forum > Przedszkole
Giekuss
Mam 2 tabelki w bazie danych:

Rezerwacje
id
roomId
i wiele innych

Sale
id
title
i inne

Potrzebuje pobrać nazwę sali, a nie numer id z formularza.
$message .= '<p>Wybrana sala: '.($_POST['roomId']).'</p>';

Chciałbym zamiast Id sali wyświetliło mi nazwę.
Da radę to jakoś łatwo zrobić?
nospor
Tak, LEFT JOIN w zapytaniu
PRzenosze
Giekuss
  1. $sala="SELECT sale.title FROM `sale` LEFT JOIN `rezerwacje` on sale.rezerwacje = sale.id";

Ułożyłem takie zapytanie i jak teraz wyświetlić samą nazwe sali?
robertpiaty
Np tak jak na przykładzie 3 http://php.net/manual/en/mysqli.quickstart.statements.php
salfunglandyare
Ale zapytanie zupelnie nie tak... echh... musisz powiązać te 2 tabele, czyli bardziej on sale.rezerwacje = rezerwacje.id where rezerwacje.id = ID_Z_POST, a zaloze sie, ze masz odwrotnie: sale.id = rezerwacje.sale_id, bo wiele rezerwacji do 1 sali... Poza tym w tym przypadku nie left join, tylko inner join.
Giekuss
W bazie danych działa to tak:
1. Użytkownik wybiera przy rezerwacji sale -> sale są pobierane z tabeli sale.
2. I w tabeli roomId wyświetlany jest id od sali która została wybrana podczas rezerwacji.
3. Chcę to wysłać e-mailem
4. Zamiast ID wybranej sali interesuje mnie wyświetlić nazwę tej sali czyli pole title.

robertpiaty
  1. SELECT sale.title FROM `rezerwacje` LEFT JOIN `sale` ON rezerwacje.roomId = sale.id
salfunglandyare
może tak:
  1. $nazwa_sali = '';
  2. $mysqli = new mysqli("localhost", "uzytkownik", "haslo", "nazwabazydanych");
  3. $zapytanie = $mysqli->prepare('select * from sale where id = ?');
  4. $zapytanie->bind_param('i',$_POST['roomId']);
  5. $zapytanie->execute();
  6. $zwrot = $zapytanie->get_result();
  7. while($wiersz = $zwrot->fetch_assoc()){
  8. $nazwa_sali = $wiersz['title'];
  9. }

Twoja nazwa sali jest w zmiennej $nazwa_sali (o ile był 1 rekord z zapytania, a najprawdopodobniej był)

//Edit: do @robertplaty - w tym przypadku dostanie wszystkie nazwy sali, dla których były rezerwacje lub null jeśli relacja nie przewidziała usunięcia rezerwacji przy usunięciu sali... dostaje tyle rekordów, ile było rezerwacji - powtarzających się lub nie, z null lub nie smile.gif
Giekuss
  1. $query="SELECT sale.title FROM `rezerwacje` LEFT JOIN `sale` ON rezerwacje.roomId = sale.id";
  2. $this->db->sql_query($query);
  3. while($res = $this->db->sql_fetchrow()){
  4. //echo $res['roomId'];
  5. $message .= '<p>Wybrana sala: '.$res['roomId'].'</p>';
  6. }


Na ten moment mam tak w e-mailu teraz wyświetlają się wszystkie rezerwacje. To znaczy w bazie jest 54 wyniki to tyle razy pojawia się "Wybrana sala: " w e-mail i nie zwraca żadnej wartości, ani id, ani nazwy sali sad.gif
salfunglandyare
  1. $query="SELECT sale.title FROM `sale` where sale.id = ".(int)$_POST['roomID'];

To mniej wiecej to samo, co pisalem powyzej, ale dla Twojego kodu wystarczy. Przy wcześniejszym dostałeś dokładnie to, o czym pisałem w edit do @robertplaty smile.gif
Aha, musisz zamiast $res['roomId'] dać $res['title']
robertpiaty
salfunglandyare masz rację miałem na myśli jeszcze where rezerwacje.id = {tutaj numer rezerwcji ale nie wstawiony bezpośrednio tylko za pomocą bind_param} ale chyba przez późną godzinę zapomniałem to dopisać. Zakładam że do każdej rezerwacji może być przypisane kilka sal.

Jeśli chcesz pobrać wszystkie rezerwacje które mają przypisane sale to:
  1. SELECT sale.title FROM `rezerwacje` LEFT JOIN `sale` ON rezerwacje.roomId = sale.id WHERE sale.id IS NOT NULL
salfunglandyare
@robertpiaty (przepraszam za zmiane nicka wczesniej, u mnie pogrubione i wyglada jak l) - koledze @Glekuss chodzi chyba jednak o jedna, konkretna sale, akurat tabela rezerwacje w tym momencie nie gra roli... ale niech sie wypowie sam pytajacy biggrin.gif
Giekuss
Dziękuję zrobiłem biggrin.gif Zgadza się chodziło o jedną konkretną sale ;D
robertpiaty
Jeśli jest tak jak piszesz to nie ma sensu robić joina i trzeba zrobić tak jak Ty napisałeś.
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.