Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniem Join
Forum PHP.pl > Forum > PHP
hzl_91
Witam. Mam problem. Otórz chcąć uzyskać 1 zapytanie z newsów postanowiłem zrobić coś takiego:
  1. <?php
  2. $sa = "SELECT n.*,u.*,s.* FROM news n
  3. LEFT JOIN source s ON s.name=n.source
  4. JOIN users u ON u.login=n.who_add
  5. WHERE n.status='on' 
  6. ORDER BY n.id DESC";
  7. $result = mysql_query($sa);
  8. while($row = mysql_fetch_array($result)) 
  9. {
  10.  $list_news[] = array(
  11. 'id' => $row['id'],
  12. 'title' => $row['title'],
  13. 'who_add' => $row['who_add'],
  14. 'when_add' => date('Y-m-d h:m:s',$row['when_add']),
  15. 'text_long' => $row['text_long'],
  16. 'full_link' => $nice_url=='on'?'news/'.$row['id'].'.html':'index.php?mode=news&id='.$row['id'].'',
  17. 'read_news_full' => $lang[4],
  18. 'news_admin_link' => $nice_url=='on'?'admin/'.$row['id'].'.html':'admin.php?mode=news&id='.$row['id'].'',
  19. 'admin' => $lang[3],
  20.  );
  21.  }
  22.  ?>


I do tego takie struktury tabel:
Struktura tabeli news:
  1. CREATE TABLE `news` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `title` varchar(255) NOT NULL DEFAULT '',
  4. `who_add` int(11) NOT NULL DEFAULT '0',
  5. `when_add` int(11) NOT NULL DEFAULT '0',
  6. `text_long` text NOT NULL,
  7. `text_full` text NOT NULL,
  8. `source` int(11) NOT NULL DEFAULT '0',
  9. `status` varchar(255) NOT NULL DEFAULT 'on',
  10. `bin` varchar(255) NOT NULL DEFAULT 'no',
  11. PRIMARY KEY (`id`)
  12. ) TYPE=MyISAM AUTO_INCREMENT=3 ;


Struktura tabeli source:
  1. CREATE TABLE `source` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(255) NOT NULL DEFAULT '',
  4. `link` varchar(255) NOT NULL DEFAULT '',
  5. PRIMARY KEY (`id`)
  6. ) TYPE=MyISAM AUTO_INCREMENT=2 ;


Struktura tabeli users:
  1. CREATE TABLE `users` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `login` varchar(255) NOT NULL DEFAULT '',
  4. `password` varchar(255) NOT NULL DEFAULT '',
  5. `email` varchar(255) NOT NULL DEFAULT '',
  6. `status` varchar(255) NOT NULL DEFAULT '1',
  7. `ip` varchar(255) NOT NULL DEFAULT '',
  8. `register` varchar(255) NOT NULL DEFAULT '',
  9. `registerlast_online` varchar(255) NOT NULL DEFAULT '',
  10. PRIMARY KEY (`id`)
  11. ) TYPE=MyISAM AUTO_INCREMENT=3 ;


I mój skrypt mi nie działa. Po prostu nic nie wyswietla. Gdzie zrobiłem błąd. Czego zapomniałem. Pierwszy raz używam tego typu zapytanie.

Pomocy chcę newsy dzisiaj skończyć.
dr_bonzo
--1. Zle forum --> MySQL--
2. Co powinien skrypt robic?
3. Sprawdz czemu ci nic nie wyswietla -- zly SQL, zero wynikow, echo zle uzyles czy co?
4. Wyprobuj zapytanie w phpmyadminie (bezposrednio na bazie)

Przenosze
---
edit: chociarz, po namysle, moze to problem w php, zobaczymy
hzl_91
2) Skrypt ma wyświetlić rekordy z newsy i pobrać dane z users i source
3) zero wyników

A phpmyadmin zwraca takie coś:
Cytat
MySQL zwrócił pusty wynik (zero rekordów). (Wykonanie zapytania trwało 0.0195 sekund(y))
dr_bonzo
No to albo zle zapytanie (wyciagasz nie to co chciales) lub rzeczywiscie brak takich newsow.

--- edit:
Co ty robisz w tym selekcie:

  1. JOIN source s ON s.name=n.source


n.`source` int(11) NOT NULL default '0',
s.`name` varchar(255) NOT NULL default '',

od kiedy to moize byc rowne?
hzl_91
Pisałem, że robię takie zapytanie pierwszy raz proszę o wyrozumiałość tongue.gif Możesz powiedzieć jak przebudować bazę i jak postawić prawidłowe zapytanie.
dr_bonzo
Nie chce mi sie.

Musisz laczyc po IDkach, w newsie przeptrzymujesz ID zrodla i laczysz news.source = source.id
i zwykly JOIN wystarczy (zamiast LEFT [OUTER] chyba ze tego potrzebujesz)
Zacznij od prostszego zapytania: tylko news i source i je rozbudowywuj
hzl_91
Dzięki. Zrobiłem <jupi>

Proszę o zamkniecie tematu.
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.