Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniem MySQL
Forum PHP.pl > Forum > PHP
Tadek888
Witam serdecznie.

Domyślam się że poruszę temat i połowa odpiszę że od tego są frameworki ale bardzo proszę. Jeśli już ktoś chce to niech odpowie na to zagadnienie smile.gif

Mam taki oto kod:
  1. $cat_list = '1,2,3,4,5';
  2. $todo = mysql_query("DELETE FROM ".TABELA." WHERE ".ID." = '$id' AND ".CAT." NOT IN ('$cat_list')", $link);


z listingu domyślacie się jak powinien działać ale nie działa więc to źle sformułowałem.

- gdzie błąd
- jakaś wkazówka
- jak wygooglać
...

Bardzo proszę o pomoc smile.gif)
piotrala
Cytat(Tadek888 @ 25.05.2012, 23:14:54 ) *
  1. $cat_list = '1,2,3,4,5';
  2. $todo = mysql_query("DELETE FROM ".TABELA." WHERE ".ID." = '$id' AND ".CAT." NOT IN ('$cat_list')", $link);

A czemu w ogóle dajesz te cudzysłowy i kropki wokół słów TABELA, ID, CAT?
Domyślam się, że PHP traktuje to wtedy jako nazwy stałych (których nie znajduje), a nie widzę powodu, dla którego nazwy pól w tabeli miałbym zapisywać w stałych smile.gif

Kolejna sprawa: totalnie nie rozumiem warunku ID = '$id'. Skąd bierzesz ten $id? Jaka jest struktura tabeli? Gdybyś pokazał strukturę tabeli, to by pomogło.
Jeżeli masz tabelę z kluczem podstawowym w jednej kolumnie, to po co jest ten drugi warunek z CAT?
Tadek888
Jeśli chodzi o stałe - to właśnie tak to działa smile.gif
Ze stałymi wszystko jest ok są znajdowane.
W innych zapytaniach działa tak jak trzeba.

Stała id nie jest id tabeli z indeksem PRIMARY.

Chodzi tutaj o podopwiedź odnośnie składni.

Chcę skasować wszystkie wpisy które mają ID np. 20 i CAT inny niż podany w ciągu czyli 1,2,3,4,5 używając NOT IN ()

lub czegoś innego co spowoduje że moje zapytanie zacznie robić z wpisami to co chcę smile.gif

Dobra już nie trzeba smile.gif
Naprawiłem.

Stary:
  1. $cat_list = '1,2,3,4,5';
  2. $todo = mysql_query("DELETE FROM ".TABELA." WHERE ".ID." = '$id' AND ".CAT." NOT IN ('$cat_list')", $link);


Nowy:
  1. $cat_list = '1,2,3,4,5';
  2. $todo = mysql_query("DELETE FROM ".TABELA." WHERE ".ID." = '$id' AND ".CAT." NOT IN (".$cat_list.")", $link);


W jakiś dziwny sposób PHP ładowało do zapytania cudzysłów i mimo że teoretycznie oba zapisy powinny prowadzić do jednego rozwiązania to tak nie było.
Może komuś się to przyda a jeśli nie, to można zamknąć, zarchiwizować, wyrzucić ...
smile.gif

Cytat(piotrala @ 25.05.2012, 23:42:19 ) *
A czemu w ogóle dajesz te cudzysłowy i kropki wokół słów TABELA, ID, CAT?
Domyślam się, że PHP traktuje to wtedy jako nazwy stałych (których nie znajduje), a nie widzę powodu, dla którego nazwy pól w tabeli miałbym zapisywać w stałych smile.gif

Chociażby dlatego że można zrobić prosty komponent jak newsy. Później go udoskonalać i przeszczepiać do innej strony. Wystarczy wtedy zmienić wartość stałej w jednym pliku aby zastosowało to się w całym komponencie. Wydaje mi się że to wystarczający powód smile.gif tym bardziej że małe strony z takimi komponentami można trzymać w jednej bazie danych smile.gif
piotrala
Cytat(Tadek888 @ 26.05.2012, 02:40:35 ) *
Stary:
  1. $cat_list = '1,2,3,4,5';
  2. $todo = mysql_query("DELETE FROM ".TABELA." WHERE ".ID." = '$id' AND ".CAT." NOT IN ('$cat_list')", $link);

W jakiś dziwny sposób PHP ładowało do zapytania cudzysłów i mimo że teoretycznie oba zapisy powinny prowadzić do jednego rozwiązania to tak nie było.

No tak faktycznie, i wtedy MySQL myślał, że podajesz mu stringa smile.gif Nie zauważyłem tego drobiazgu późnym wieczorem.
Cytat(Tadek888 @ 26.05.2012, 02:40:35 ) *
Wystarczy wtedy zmienić wartość stałej w jednym pliku aby zastosowało to się w całym komponencie. Wydaje mi się że to wystarczający powód smile.gif tym bardziej że małe strony z takimi komponentami można trzymać w jednej bazie danych smile.gif

Hmm mądre rozwiązanie smile.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.