Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Szukanie w całej bazie konkretnego ID
Forum PHP.pl > Forum > Bazy danych > MySQL
neo1986kk
W mojej bazie danych, wszystkie ID muszą być unikalne, nie mogą powtórzyć się w żadnej tabeli, więc wymysliłem coś takiego:

  1.  
  2. SELECT t.TABLE_NAME
  3. FROM INFORMATION_SCHEMA.TABLES t
  4. INNER JOIN INFORMATION_SCHEMA.COLUMNS c ON t.TABLE_NAME = c.TABLE_NAME
  5. WHERE t.TABLE_SCHEMA = 'my_crm'
  6. AND c.COLUMN_NAME = 'ID'
  7. GROUP BY t.TABLE_NAME
  8. LIMIT 0 , 30
  9.  



i teraz dopiero php'em mogę sprawdzić


  1. foreach($tabele as $key=>$val){
  2. $q=query('Select ID from '.$val[0]);
  3. }


niestety to trwa zbyt długo i tu nasunęła mi się pewna myśl
Czy jest możliwość wyciągnięcia tego w jednym zapytaniu?

próbowałem w ten sposób:

  1. SELECT t.TABLE_NAME AS tn, c.COLUMN_NAME AS cn
  2. FROM INFORMATION_SCHEMA.TABLES t
  3. INNER JOIN INFORMATION_SCHEMA.COLUMNS c ON t.TABLE_NAME = c.TABLE_NAME
  4. WHERE t.TABLE_SCHEMA = 'my_crm'
  5. AND c.COLUMN_NAME = 'ID'
  6. AND `tn`.`cn`='.$wartość_szukanego_id.'
  7. GROUP BY t.TABLE_NAME
  8. LIMIT 0 , 30


ale SQL nie rozpoznaje `tn`.`cn` jako tabela.nazwa_kolumny sad.gif

Jakieś pomysły?
nospor
$q=query('Select ID from '.$val[0]).' where ID=szukaneID';
I juz tak dlugo nie bedzie trwalo
neo1986kk
no zgadza się , ale jeszcze trochę za długo, ale skoro nie ma innej opcji to musi tak zostać.

A co sądzicie o tym, aby zebrać te tabele wszystkie w tablicę i skonstruować zapytanie w ten sposób


  1.  
  2. $tabele - to będzie tablica po zapytaniu
  3. przyklad:
  4.  
  5. $tabele=array('ludzie a', 'samochody b'....)
  6.  
  7. $tabele_columny=array('a.ID=$wartosc_szukanego_ID', 'b.ID=$wartosc_szukanego_ID);
  8.  


  1.  
  2. SELECT ID FROM JOIN(',', $tabele) WHERE JOIN('or', $table_columny)
  3.  


To by było jedno zapytanie wtedy


Jeszcze może dodam, że mi zależy bardziej, żeby nie znalazł tego ID, bo ja sobie wymyśliłem tutaj tak że jak znajdzie to zwraca FALSE;

a moze lepiej będzie na odwót, że jak nie znajdzie to zwraca TRUE

ale to i tak musi całą bazę przeszukać :/
nospor
Jak chcesz miec jedno zapytanie to zaiteresuj sie UNION
Pyton_000
A możesz powiedzieć jaki jest powód tego że nie może się ID powtórzyć ?
neo1986kk
powód jest bardzo prosty

mam na przyklad ludzi i samochody i chce zrobić system komentarzy

dodaję komentarz do ID 192809109595 i wiem ze to jest komentarz do czerwonego samochodu

pobieranie komentarzy też jest dużo prostrze bo jak jestem na stronie samochodu

to pobieram Select * from comments where item=$my_car_ID

jeśli do konkretnego człowieka Select * from comments where item=$man_ID
nospor
facepalmxd.gif

Powod moze i prosty, ale jednoczesnie glupi... zrob normalnie jak czlowiek i nie kombinuj z takimi bzdurami.
neo1986kk
No to w takim razie w jaki sposób ściągać komentarze?

zrobić dodatkową kolumnę, w której umieszczę gdzie ten komentarz ma być?

Coś w stylu:

ID | Komentarz | ID_miejsca_do_ktorego_ma_sie_dodac | ID_tabeli
Pyton_000
Taa, i zaraz zaczniesz się zastanawiać co zrobić bo Ci sie zakres BigInt skończy laugh.gif
nospor
Schemat uniwersalny
ID | KOMENTARZ | TYPE (car, user, flower) | ID_Z_DANEJ_TABELI
No i rzecz jasna jeden klucz na pole TYPE i ID_Z_DANEJ_TABELI

Albo schemat specjalizowany, dla kazdej tabeli oddzielna tabela z komentami - ale to też srednio fajne.
neo1986kk
no juz sie powoli zaczynam zastanawiac, chyba jednak skorzystam z rady nospora i zrobie na ID autoincrement od 1

Cytat(nospor @ 5.03.2015, 15:50:37 ) *
No i rzecz jasna jeden klucz na pole TYPE i ID_Z_DANEJ_TABELI


Jak to jeden klucz na dwie kolumny?
nospor
Normalnie. Klucz moze skladac sie z wielu kolumn a nie tylko z jednej

Mowiąc klucz mam na mysli INDEX a nie PRIMARY KEY
neo1986kk
a dobra już rozumiem, dzięki za pomoc, zabieram się za poprawę bazy
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.