[php/mysql] Wyświetlanie unikalnych rekordów

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
blajo
Posty: 2
Rejestracja: pn gru 18, 2006 8:30 am

[php/mysql] Wyświetlanie unikalnych rekordów

Post autor: blajo »

Mam taką strukturę bazy:

[sql]
CREATE TABLE `domena` (
`id` int(11) NOT NULL auto_increment,
`nazwa` varchar(100) NOT NULL default '',
`data_dodania` date NOT NULL default '0000-00-00',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=70 ;
[/sql]

[sql]
CREATE TABLE `pozycje` (
`id` int(11) NOT NULL auto_increment,
`id_sk` varchar(11) NOT NULL default '',
`google` varchar(5) NOT NULL default '',
`onet` varchar(5) NOT NULL default '',
`wp` varchar(5) NOT NULL default '',
`data` date NOT NULL default '0000-00-00',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=7 ;
[/sql]

[sql]
CREATE TABLE `slowo_kluczowe` (
`id` int(11) NOT NULL auto_increment,
`id_domena` varchar(11) NOT NULL default '',
`slowo_kluczowe` varchar(100) NOT NULL default '',
`data_dodania` date NOT NULL default '0000-00-00',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=47 ;
[/sql]

Oraz takie zapytanie:
[php]<?php

$qp = "SELECT s.slowo_kluczowe, s.id, s.data_dodania, p.data, p.google, p.onet, p.wp FROM slowo_kluczowe as s, pozycje as p WHERE s.id_domena = $id AND p.id_sk=s.id ORDER BY s.slowo_kluczowe";
$rp = mysql_query($qp) or die(mysql_error());

?>[/php]

Mój problem polega na tym, że nie wiem jak zrobić, by wyświetlane był dla danej domeny tylko po jednym unikalnym słowie kluczowym (te, które w bazie ma najmłodszą datę).

Pomoże ktoś?
123456
Zaczyna działać
Zaczyna działać
Posty: 514
Rejestracja: sob paź 28, 2006 1:19 pm

...

Post autor: 123456 »

Wedlug tego co juz napisales:
[sql]
SELECT
s.slowo_kluczowe, s.id, s.data_dodania,
p.data, p.google,
p.onet, p.wp
FROM
slowo_kluczowe as s,
pozycje as p
WHERE
s.id_domena = $id and
p.id_sk=s.id and
s.data_dodania = (select max(data_dodania) from slowo_kluczowe where id_domena = s.id_domena)
order by
s.slowo_kluczowe
[/sql]
wyświetlane był dla danej domeny tylko po jednym unikalnym słowie kluczowym (te, które w bazie ma najmłodszą datę)
Jesli dobrze zrozumialem (chociaz patrzac na zapytanie przez Ciebie napisane to pewnie zle), to chcesz wypisac wszystkie domeny z ich slowem kluczowym ktore zostalo dodane najpozniej (czyli jest najmlodsze). W takim razie:

[php]
SELECT
d.nazwa, s.slowo_kluczowe,
s.data_dodania, p.google,
p.onet, p.wp
FROM
slowo_kluczowe as s,
pozycje as p,
domena as d
WHERE
d.id = s.id_domena and // powiazanie slowa kl. z nazwa domeny
p.id_sk = s.id and // powiazanie pozycji w wyszukiwarce ze slowem kl.
s.data_dodania = (select max(data_dodania) from slowo_kluczowe where id_domena = s.id_domena) // wybranie najmlodszego slowa
order by
s.slowo_kluczowe
[/php]

Informacja dla osob ktore sie przyczepia wyboru kolorowania skladni: Chcialem dodac komentarze a tag [sql] nie obsluguje komentarzy MySQL i dlatego wybralem kolorowanie PHP i jego komentarze.
blajo
Posty: 2
Rejestracja: pn gru 18, 2006 8:30 am

Re: [php/mysql] Wyświetlanie unikalnych rekordów

Post autor: blajo »

Nie działa mi takie zapytanie wogóle.

Wyświetlam sobie tak tabelkę:

[php]<?php
while ($ro = mysql_fetch_array($rp)) {
echo "
<tr>
<td class=\"zawartosc\">$i</td>
<td class=\"zawartosc\">" . $ro["slowo_kluczowe"] ."</td>
<td class=\"zawartosc\">
<table style=\"width: 120px; align: center;\">
<tr>
<td style=\"width: 40px; text-align: center;\"><img src=\"icon_google.gif\"></td>
<td style=\"width: 40px; text-align: center;\"><img src=\"onet.ico\"></td>
<td style=\"width: 40px; text-align: center;\"><img src=\"icon_msn.gif\"></td>
</tr>

<tr>
<td style=\"width: 40px; text-align: center;\"><b>" . $ro["google"] ."</b></td>
<td style=\"width: 40px; text-align: center;\"><b>" . $ro["onet"] ."</b></td>
<td style=\"width: 40px; text-align: center;\"><b>" . $ro["wp"] ."</b></td>
</tr>
</table>
</td>
<td class=\"zawartoscsr\">
<table style=\"width: 120px; align: center;\">
<tr>
<td style=\"width: 40px; text-align: center;\"><img src=\"icon_google.gif\"></td>
<td style=\"width: 40px; text-align: center;\"><img src=\"onet.ico\"></td>
<td style=\"width: 40px; text-align: center;\"><img src=\"icon_msn.gif\"></td>
</tr>
<tr>
<td style=\"width: 40px; text-align: center;\"><b>".sr($ro["google"], 2)."</b></td>
<td style=\"width: 40px; text-align: center;\"><b>".sr($ro["onet"], 2)."</b></td>
<td style=\"width: 40px; text-align: center;\"><b>".sr($ro["wp"], 2)."</b></td>
</tr>
</table>
</td>
<td class=\"zawartoscsr\">".srsr($ro["google"], $ro["onet"], $ro["wp"], 3)."</td>
<td class=\"zawartoscsr\"><a href=\"\" onclick=\"javascript:window.open('historia.php?id={$ro['id']}','Planlekcji','width=420,height=400,resizable=1,scrollbars=yes,menubar=no');\">historia</a></td>
<td class=\"zawartoscsr\">" . $ro["data"] ."</td>
<td class=\"zawartoscsr\">" . $ro["data_dodania"] ."</td>
<td class=\"zawartoscsr\"><a href=\"pozycje.php?id={$ro['id']}\">dodaj</a><br /><a href=\"akcja.php?a=delsk&id={$ro['id']}\">usuń</a></td>
</tr>";
$i++;
}
echo "</table>";

?>[/php]

i chce aby tutaj wyświetlała mi się lista słów kluczowych (z unikalnymi nazwami dla danej domeny). Te słowa kluczowe z najmłodszą datą w bazie. Jeśli to ma pomóc w rozwiązaniu mojego problemu udostępnie cały skrypt.
123456
Zaczyna działać
Zaczyna działać
Posty: 514
Rejestracja: sob paź 28, 2006 1:19 pm

...

Post autor: 123456 »

A ja Tobie napisze ze te zapytanie dziala. Jesli chcesz zebym pomogl to napisz na priv namiar na jakis komunikator a jak nie to przeczytaj sobie jeszcze raz co napisalem wczesniej i dokladniej okresl co chcesz.
ODPOWIEDZ