![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 235 Pomógł: 0 Dołączył: 18.11.2006 Skąd: gorzów Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Potrzebuję zrobić zapytanie SQL, które będzie albo dodawać rekordy (jeżeli $search w kolumnie name nie istnieje) lub aktualizować (jeżeli $search w kolumnie name istnieje). Co prawda mógłby to zrobić schematem Sprawdzenie istnienia $search w name funkcją SELECT i count (w php) -> if sprawdzający wartość count i wrzucający odpowiednie zapytanie INSERT INTO bądź UPDATE. Problem polega na tym, że sama instrukcja SELECT bez wskazania konkretnego indeksu wykonuje się zdecydowanie za długo (w tabeli jest ponad 600 tys rekordów). Myślałem o REPLACE INTO, ale zauważyłem, że albo dodaje nowy, albo zastępuje stary nowymi wartościami. A potrzebuję wykonać dodatkowo polecenie count=count+1, czyli stary count nie może być zastąpiony, ponieważ stale będzie nosił wartość 1, a to ma zliczać. Jest możliwość rozwiązania tej sprawy jednym zapytaniem? Pozdrawiam, Bartek. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Średnio zrozumiałem o co dokładnie chodzi z tym szukaniem, jakbyś tak dokładniej wytłumaczył.
Ja kiedyś miałem podobny problem, chciałem sprawdzić czy istnieje rekord, jeżeli istnieje dodać wartość a jeżeli nie to go dopisać. W tym celu napisałem odpowiednią funkcję w MySQL, którą wywoływałem zapytaniem z potrzebnymi danymi i ona się zajmowała resztą, tym sposobem ograniczyłem liczbę zapytań. -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Załóż klucz unikalności na pole "search"
http://dev.mysql.com/doc/refman/5.0/en/ins...-duplicate.html -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 235 Pomógł: 0 Dołączył: 18.11.2006 Skąd: gorzów Ostrzeżenie: (0%) ![]() ![]() |
Dokładnie o coś takiego mi chodzi.
Mam tabelę Cytat ID NAME COUNT I przy wywoływaniu instrukcji, albo dopisuję kolejny rekord z wartością NAME = $search oraz COUNT = 1, natomiast jeżeli istnieje rekord spełniający warunek NAME = $search, towykonywane jest tylko COUNT=COUNT+1. Jeśli Kolega ma możliwość, będę wdzięczny za podesłanie tej klasy dla podglądu. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Przyznam szczerze, że nie znałem sposobu, który podał wookieb, ale w moim przypadku i tak musiałem wykonywać operacje na 2+ tabelach.
-------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
-------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 235 Pomógł: 0 Dołączył: 18.11.2006 Skąd: gorzów Ostrzeżenie: (0%) ![]() ![]() |
@wookieb Działa elegancko! Dzięki!
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.04.2025 - 03:21 |