Temat: Łączenie 2 rekordów

Witam, musze połączyc 2 rekordy, a dosłownie nie wiem jak sie za to zabrac..

mam takie coś..

[php]$zapytanie = "SELECT * FROM $tabela WHERE zatwierdz = 'tak' ORDER BY id DESC LIMIT $od , $na_stronie";
$db = new PDO('mysql:host=localhost;dbname=admin', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")) or die();
$stmt = $db->query("SELECT * FROM quotes ORDER BY id DESC");
$w = $stmt->fetch(PDO::FETCH_ASSOC);
$wynik = mysql_query($zapytanie);

while ($tablica = mysql_fetch_assoc($wynik)) {
echo "cos tam"; [/php]

Tabela cytat:
- id
- tresc
- zatwierdz
- nick
Tabela quotes :
- id
- ocena

Muszę je połączyc, tworze sobie stronę z cytatami, które będą wyświetlanie na stronie w kolejnosci ID, żeby cytat był pokazany na stronie musi miec "zatwierdz = tak", znajduje się to w tabeli "cytat"

quotes to oceny danego cytatu.. muszą się pokrywac.

Z góry dzięki.. ;)
Tomasz L.

Tomasz L. Inzynier Systemów
Bezpieczeństwa,
ASCOMP S.A.

Temat: Łączenie 2 rekordów

SELECT * FROM $tabela t1 left outer join $quotes t2 on t1.id=t2.id WHERE zatwierdz = 'tak' ORDER BY id DESC LIMIT $od , $na_stronie";
Oczywiście kluczyki na id. Left outer w przypadku braku oceny zwróci null, jeśli nie chcesz mieć bez ocen to inner join.
Adam H.

Adam H. Analityk Integracji
Systemów/Analityk
Systemowy

Temat: Łączenie 2 rekordów

3 rozne sposoby:

1) select c.ocena,
q.*
from quotes q,
cytat c
where q.id = c.id
and c.zatwierdz = 'TAK'
order by c.id asc ;
/*pokazuje wszystkie cytaty nawet te niemajace oceny*/

2) select c.ocena,
q.*
from quotes q,
cytat c
where q.id = c.id
and c.zatwierdz = 'TAK'
and q.ocena is not null
order by c.id asc ;;
/*pokazuje cytaty majace oceny*/

3) select c.ocena,
q.*
from quotes q,
cytat c
where q.id (+) = c.id
and c.zatwierdz = 'TAK'
order by c.id asc ;
/*pokazuje cytaty majace oceny i te, ktore ich nie maja*/Ten post został edytowany przez Autora dnia 16.04.14 o godzinie 18:00
Adam H.

Adam H. Analityk Integracji
Systemów/Analityk
Systemowy

Temat: Łączenie 2 rekordów

Adam H.:
3 rozne sposoby:

1) select c.ocena,
q.*
from quotes q,
cytat c
where q.id = c.id
and c.zatwierdz = 'TAK'
order by c.id asc ;
/*pokazuje wszystkie cytaty nawet te niemajace oceny*/

2) select c.ocena,
q.*
from quotes q,
cytat c
where q.id = c.id
and c.zatwierdz = 'TAK'
and q.ocena is not null
order by c.id asc ;;
/*pokazuje cytaty majace oceny*/

3) select c.ocena,
q.*
from quotes q,
cytat c
where q.id (+) = c.id
and c.zatwierdz = 'TAK'
order by c.id asc ;
/*pokazuje cytaty majace oceny i te, ktore nie posiadaja odpowiednika w tabeli ocena*/

mial byc pretty print, ale nie wyszlo po zapisaniu posta :(Ten post został edytowany przez Autora dnia 16.04.14 o godzinie 18:02
Robert Chmielewski

Robert Chmielewski Senior SQL
Developer, Sagra
Technology sp. z
o.o.

Temat: Łączenie 2 rekordów

Jesli powiązanie jest jeden do jeden to dziwię się że pole ocena nie zostało dadane do tabeli CYTAT
Jednakże obawiam się że zamysł autora pytania był troszkę inny
czyli chce połączyć jeden cytat do wielu ocen i wyświetlić to na stronie PHP

Z tym PHP to trochę nie to forum więc nie będę dawał gotowegorozwiazania.
Opisze to shematycznie bo nie che mi się teraz szukać dokładnej składni PHP

$zapytanie1=db->query("SELECT * FROM cytay ORDER BY id DESC");
while( /*tu sprrawdzić czy jest kolejny rekord z zapytanie1*/ )
{
$id_cytat= //pobrac idcytat z rekordu
// oraz inne dane
//wyswietlic cytat

$zapytanie2=db->query("SELECT * FROM quotes WHERE id=".$id_cytat);
while( /*tu sprrawdzić czy jest kolejny rekord z zapytanie2*/ )
{
//wyswietlic ocene z zapytanie2
}
$zapytanie2->close();
}
$zapytanie1->close()



Wyślij zaproszenie do