Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Projekt bazy do system newsów...
Forum PHP.pl > Forum > Przedszkole
oomaster
Witam,

Nie wiem czy dobrze wytłumaczę wam co chcę uzyskać ale do rzeczy próbuję uzyskać efekt który jest np. na ithink.pl, wiadomosci24.pl itd. Otóż przy dodawaniu wiadomości można dodać zdjęcia (nawet kilkadziesiąt) wiadomo ,że stworzy się do tego 2 tabelki smile.gif np.

news
Cytat
-id
-tytlu
-tresc
-data


foto
Cytat
-id
-opis
-adres
-data
-idnews


Ale mój problem polega na połączeniu tych 2 baz. Przecie przy zwyczajnym połączeniu np. w tabeli news jest id a w foto jest idnews i przy pobieraniu fotek pobiorę je według idnews. Czy macie jakieś inne sposoby połączenia tych 2 tabel questionmark.gif? Bo jednak po samym ID newsa mogą wystąpić problemy.
wookieb
A czemu miałyby występować problemy? idnewsa bedzie unikalne wiec jaki problem widzisz? Do danego newsa od podanym id pobierasz zdjecia o idnewsa. Nie widze problemu.
oomaster
Ale gdyby ktoś dodał w tym samym momencie newsa to zdjęcia by niestety źle trafiły według mnie. Chociaż to mało możliwe ,żeby ktoś w tym samym momencie dodał newsy i by się zrobiły np. 2 newsy o tym samym id.

EDIT: teoretycznie i praktycznie wszystko będzie działać smile.gif w sumię przeanalizowałem wszystkie możliwości. Różne kombinacje, dodanie w tym samym czasie. Za nic nie da się wymieszać itd. Będzie działać
nospor
robisz pole autoincrement i ono zawsze sie zwieksza o 1, niezaleznie czy w tym samym momemcie jest 1000 newsow czy 1
oomaster
OK, znalazłem mały chaczyk w tym wszystkim. Bo jeśli do newsa nie zostanie dodana fota to pole ID w foto będzie zaniżone gdy będzie to automatycznie :/ I pozatym jak ktoś chce dodać kilka fotek to one będą miały inne id niż news. A chodzi oto aby jakoś połączyć 2 tabeli foto i news sad.gif
nospor
ale ID z newsa a ID z foto to dwa rozne id i one nie są ze sobą w zaden sposob powiązane

Ciebie interesuje w tabeli FOTO pole IDNEWS i w to pole masz wkladac id newsa, do ktorego nalezy to zdjęcie. Przeciez id newsa znasz przy wkladaniu do niego zdjęcia.
oomaster
Właśnie w tym problem ,że nie znam do końca numeru ID. Bo przecież zdjęcia dodają się razem z newsem i nigdy nie wiem czy one trafią do tego newsa którego ja chcę np. gdy przy dodawaniu fotki bym musiał poprać stary z tabeli news ID+1 ale nigdy nie wiadomo czy w tym samym momencie ktoś nie doda też newsa i się wszystko wymiesza :/

Widziałem takie rozwiązania na innych stronach (popularnych) gdzie jest możliwość dodania 2 newsów jednocześnie...
golaod
To za dużo widziałeś a za mało wiesz.
MySQL (jeśli na takiej bazie pracujesz) w mechanizmie innodb ma kolejkowanie zapytań.
W php jest funkcja która wydobywa id ostatnio dodanego newsa i wtedy przy dodawaniu zdjęć w polu idnewsa wprowadzasz właśnie tą daną.
robos85
To najpierw dodaj newsa poprzez INSERT, a następnie użyj mysql_insert_id" title="Zobacz w manualu PHP" target="_manual
np
  1. <?php
  2. $sql=mysql_query("INSERT INTO `news`(...) VALUES (...)");
  3. $id_newsa=mysql_insert_id;
  4. ?>


W ten sposób zmienna $id_newsa będzie przechowywała id dodanego newsa. Po tym już dodajesz zdjęcia
  1. <?php
  2. mysql_query("INSERT INTO `fotki`(...,`newsid`) VALUES (....'".$id_newsa."')");
  3. ?>
nospor
Cytat
Po tym już dodajesz zdjęcia .... WHERE `newsid`='".$id_newsa."'....
No chyba cos ci nie wyszlo. WHERE daje sie w select a nie w insert winksmiley.jpg
robos85
hehe, pisząc to myślałem o czym innym i mi jeszcze insert z poprzedniej linijki w głowie został biggrin.gif
Zaraz zmienię poprzedni post;)
oomaster
OK dzięki chłopaki bardzo za pomoc zaraz sprawdzę te rozwiązania przez was zaproponowane. Tylko teraz jeszcze przed przetestowanie zastanawiam się na tym kodem smile.gif:

Kod
<?php
$sql=mysql_query("INSERT INTO `news`(...) VALUES (...)");
$id_newsa=mysql_insert_id;
?>


W jaki sposób $sql połączy się z mysql_insert_id. Nie mam żadnego logicznego wytłumaczenia tongue.gif
mike
Samo się domyśli i się połączy tongue.gif
Sam to musisz zrobić. Najpierw skorzystaj z mysql_insert_id(), pobierz dane i wstaw je do zapytania. Czyli do $sql.
Przykład w manualu pokazuje użycie. Czego chcieć więcej tongue.gif
oomaster
OK, wszystko niby ładnie, pięknie ale czemu wywala mi błąd ?

Warning: mysql_insert_id(): supplied argument is not a valid MySQL-Link resource in /home/miasto/domains/coscos.pl/public_html/add.php on line 93

Kod
$sql = "INSERT INTO news SET tytul='$tytul', tresc='$tresc'";
$idk_news = mysql_insert_id($sql);
  if (mysql_query($sql)) {
    echo "OK";
  } else {
    exit('Błąd');
  }


Dlaczego wywala błąd ? HELP !
nospor
kurcze....
http://pl2.php.net/manual/pl/function.mysql-insert-id.php
co w tym przykladzie z manuala jest dla ciebie nie jasnego?

I przestan walic pomogl kazdemu kto w tym temacie cos napisal, a juz w szczegolnosci po x pomogl dla tej samej osoby
Crozin
Próbujesz pobrać ID dodanego rekordu... przed jego dodaniem.
  1. <?
  2.  
  3. $sql = "INSERT INTO news SET tytul = '$tytul', tresc = '$tresc';";
  4. $result = mysql_query($sql);
  5.  
  6. if($result){
  7. echo 'Dodano newsa';
  8.  
  9. $newsID = mysql_insert_id();
  10. $sql = "INSERT INTO foto SET ..., newsID = $newsID;";
  11. $result = mysql_query($sql);
  12.  
  13. echo $result ? 'Dodano zdjęcia' : 'Nie dodano zdjęć';
  14. }else{
  15. echo 'Nie dodano newsa';
  16. }
  17. ?>
oomaster
Dzięki wielkie ale mam kolejny problem czy można jakimś sposobem wyświetlić zmienną która jest wykonywana niżej np.

Kod
echo"tekst nr. ".$zmienna." w którym jest zmienna";
$zmienna="44";


Czy jest jakaś możliwość ?
decha-design
niestety nie można takich czarów robić ... zmienna musi być zdeklarowana wyżej
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.