Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+mysql] Pobieranie danych z 2 tabel z warunkami
Forum PHP.pl > Forum > Przedszkole
terreska
Próbowałam na różne sposoby wykonać zapytanie, które pobierało by dane z 2 tabel i wyświetlało je po spełnieniu określonych warunków.
Niestety za każdym razem jak coś poprawiałam (zmieniałam), to pojawiały się coraz to inne błędy.

Posiadam 2 tabele:
1. artykuly (id, tekst)
2. czytane (uzytkownik, data, tekst)

Chchiałabym aby zapytanie wyświetlało tekst z artykuly, pod warunkiem, że dany użytkownik w dzisiejszym dniu nie czytał już tego tekstu.
Przyjmijmy, że po zalogowaniu: użytkownik ($uzyt), dzisiejsza data ($dzis)

Bardzo proszę o pomoc doświadczonych.
Sokal
Po pierwsze baza (czy jej część) jest źle zaprojektowana winksmiley.jpg
Po co w czytanych powielać artykuł :|
Można by zrobić tak:
- artykul (id, tekst)
- czytane (uzytkownik, data, id)

winksmiley.jpg

A zapytanie to może takie:
Kod
select artykuly.* from artykuly, czytane where czytane.data!=$dzis and czytane.uzytkownik=$uzyt

Nie wiem czy będzie działało, ale ogólny sens w nim jest biggrin.gif
A może left join wykorzystać ? :|
devnul
@sokal: tekst w tabeli czytane to chyba właśnie id tekstu a nie treść artykułu - secundo to co podałeś nie będzie działało jeśli artykuł był czytany choćby sekunde wcześniej niż teraz (zakłądam że pole data to pole przechowujące czas w sekundach) pozatym twój kod wyświetli tylko te artykuły które były już czytane a te które czytane nie były zostaną pominięte.

w php musisz określić czas w sekundach dla początku dnia (czyli godziny 0 minut 0 sekund 0) jak to zrobić podpowie ci manual dla funkcji date
  1. SELECT `text` FROM `artykul` WHERE `id` NOT IN (SELECT `text_id` FROM `czytane` WHERE `user`=$user AND `date`<$date)
terreska
devnul, zrobiłam tak jak napisałeś, to cały czas się wyświetlają artykuły.
Neeke
mhh... W tym akorat jestem swiezak.. i zabardzo niedzialam wtym typie zlozenia ale kiedys napewno bede musial sie jeszcze podszkolic....
  • Polecam przerobienie struktury tabel…. Na :
  • artykuły(id, text)
  • czytane (id, data, idusera, idartykulu)
  • [font="Times"][/font]
  1. <?php
  2. $zad=mysql_query("select artykuly.id, artykuly.text, czytane.idartykulu, czytane.idusera, czy
    tane.data from artykoły INNER JOIN czytane ON artykuły.id=czytane.artykoly where czytane.iduser<’0’ and czytane.iduser>’0’ order by czytane.data"
    ); 
  3. ?>
Spróboj tego... ale nieobiecuje ze zaadziala poprawnie ... smile.gif
devnul
rotfl nieźle - użytkownik mniejszy i jednocześnie większy od zero - z całą pewnością zadziała winksmiley.jpg

@terreska: nie napisałem że to rozwiązanie wymaga wsparcia subzapytan ze strony mysql'a a to zostało wprowadzone chyba dopiero w jego 5 wersji (a może 4?) - tak więc jeśli posiadasz wersję 3.xx to z całą pewnością to rozwiązanie nie zadziała - trzeba to rozbić na 2 zapytana

//edit:

można też tak
  1. <?php
  2. $date=mktime (0,0,0,date("m"),date("d"),date("Y"));
  3. $userid=1;
  4. ?>

  1. SELECT `artykuly`.`tekst` FROM `artykuly` JOIN `czytane` ON `artykuly`.`id`!= `artykuly`.tekst_id` WHERE `czytane`.`user`=$userid AND `czytane`.`date`<$date GROUP BY `artykuly`.`id`
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.