Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Dwie tablice jedno zapytanie
Forum PHP.pl > Forum > Przedszkole
piraciq
Witam serdecznie, proszę o pomoc zgromadzenie wielkie :-)

mam dwie tablice w pierwszej trzymam nazwę a w drugiej zapisane ustawienia


tabela z opcjami
  1. <?
  2. CREATE TABLE `s_op` (
  3.  `id` int(10) NOT NULL auto_increment,
  4.  `op_1` int(1) default '0',
  5.  `op_2` int(1) default '0',
  6.  `op_3` int(1) default '0',
  7.  `op_4` int(1) default '0',
  8.  `op_5` int(1) default '0',
  9.  `op_6` int(1) default '0',
  10.  `op_7` int(1) default '0',
  11.  `op_8` int(1) default '0',
  12.  `op_9` int(1) default '0',
  13.  `op_10` int(1) default '0',
  14.  `op_11` int(1) default '0',
  15.  `op_12` int(1) default '0',
  16.  `op_13` int(1) default '0',
  17.  `op_14` int(1) default '0',
  18.  UNIQUE KEY `id` (`id`),
  19.  KEY `op_1` (`op_1`,`op_2`,`op_3`,`op_4`,`op_5`,`op_6`,`op_7`,`op_8`,`op_9`,`op_10`,`op_11`,`op_12`,`op_13`,`op_14`)
  20. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
  21. ?>


tabela z nazwa usera
  1. <?
  2. CREATE TABLE `s` (
  3.  `id` int(5) NOT NULL auto_increment,
  4.  `nazwa` varchar(255) NOT NULL,
  5.  PRIMARY KEY  (`id`)
  6. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
  7. ?>

i teraz przy pomocy jedno zapytania chciał bym wybrać nazwę z tabeli s gdzie spełni warunek ze op_4=1

czy może ktoś pomóc questionmark.gif

pozdrawiam
piotrooo89
  1. SELECT nazwa FROM s, s_op WHERE op_4=1


?
piraciq
niestety nie działa :/
tak czy inaczej wybiera ni wszystkie rekordy
piotrooo89
no będzie wszystkie wybierać... bo ty sprawdzasz tylko czy ten warunek jest spełniony i tyle.
piraciq
powiem inaczej w phpmyadmin pokazuje mi nawet te rekordy które nie spełniają tego warunku .

  1. SELECT nazwa FROM s, s_op WHERE op_4=1


daje mi wynik 14 a tylko jeden ma ustawioną wartość na 1.
piotrooo89
a ile masz rekordów w nazwa? 14?
piraciq
w tabeli s mam 14 rekordów i tyle samo w tabeli s_op przy czym w tabeli s_op jeden rekord ma ustawione pole op_1 na "1", ale tak czy inaczej wybiera mi wszytskie
piotrooo89
nie rozumiesz chyba wybierasz wszystkie nazwy z tabeli s które spełniają warunek: kolumna op_4 jest równa 1 jeśli tak to wyświetli wszystko w kolumnie nazwa, jeśli nie nic.
piraciq
no tak fakt nie rozumie skoro tylko jeden warunek może być spełniony to dlaczego wybiera mi wszystkie rekordy questionmark.gif
piotrooo89
bo ten warunek jest spełniony. a powiedz co ty chcesz zrobić. wytłumacz to na chłopski rozum.
piraciq
user - Adam ma zapisane ustawienia w tabeli s_op
dajmy na to op_1 - pokazywanie się innym czy jest online
op_2 czy chce dostawać newslettera

i teraz ja chce w panelu osiągnąć takie coś ze przy pomocy jednego zapytania wyciągnę sobie wszystkich którzy mają zaznaczoną opcję 2 czyli wysyłanie newslettera wraz z imieniem i nr id
piotrooo89
to na mój chłopski rozum brakuje Ci jeszcze jednej kolumny w tabeli s_op która połączy Ci tabele usera z tabelą opcji.
piraciq
to co musiał bym zmienić w strukturze tabel abym mógł tego dokonać questionmark.gif
piotrooo89
dodajesz w s_op kolumnie o nazwie ids i podajesz id usera z tabeli s. potem w klauzuli WHERE dajesz

  1. WHERE s_op=1 AND s.id=s_op.ids


i śluz.
piraciq
czyli nie wystarczy jak tabele maja tak samo numerowane indexy questionmark.gif
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.