Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Powiązanie tabel po przez pole typu varchar ?
Forum PHP.pl > Forum > Bazy danych > MySQL
netvalue

mam takie dwie tabele :

  1. CREATE TABLE IF NOT EXISTS `product` (
  2. `id_product` INT(11) NOT NULL,
  3. `indeks` VARCHAR(255) NULL,
  4. PRIMARY KEY (`id_product`))
  5. ENGINE = InnoDB;
  6.  
  7.  
  8. CREATE TABLE IF NOT EXISTS `numbers` (
  9. `id_number` VARCHAR(255) NULL,
  10. `indeks` VARCHAR(255) NULL,
  11. PRIMARY KEY (`id_number`))
  12. ENGINE = InnoDB;


przkladowo tabela product

id_product | indeks
1 | ABC123
2 | ZZ2333


tabela numbers
id_number | indeks
1 | ABC123
2 | ABC123
3 | ZZ333
4 | ZZ333




Czy można powiązać tabele ze sobą po przez pole indeks ?
Crozin
Tak. Absolutnie niczym się to nie różni od dowolnego innego powiązania.
Pyton_000
Tylko pozakładaj na index klucze
netvalue
ok więc Tworze tabele

tabela product

  1. CREATE TABLE IF NOT EXISTS `product` (
  2. `id_product` INT(11) NOT NULL,
  3. `indeks` VARCHAR(255) NULL,
  4. PRIMARY KEY (`id_product`))
  5. ENGINE = InnoDB;


oraz tabela numbers

  1. CREATE TABLE IF NOT EXISTS `numbers` (
  2. `id_number` INT(11) NOT NULL,
  3. `indeks` VARCHAR(45) NOT NULL,
  4. PRIMARY KEY (`id_number`),
  5. INDEX `fk_product_numbers_product2_idx` (`indeks` ASC),
  6. CONSTRAINT `fk_product_numbers_product2`
  7. FOREIGN KEY (`indeks`)
  8. REFERENCES `product` (`indeks`)
  9. ON DELETE NO ACTION
  10. ON UPDATE NO ACTION)
  11. ENGINE = InnoDB;


ale przy tworzeniu tabeli numbers dostaje błąd ze nie moze utrworzyc tabeli i "Supports transactions, row-level locking, and foreign keys "
nospor
Jeden ma 255 drugi 45....
netvalue
Cytat(nospor @ 26.08.2014, 11:11:39 ) *
Jeden ma 255 drugi 45....

trafne spostrzeżenie , jednakże dalej otrzymuje ten sam błąd sad.gif
nospor
To pokaz kod po zmianach i dokładnie blad jaki dostajesz
netvalue
  1. CREATE TABLE IF NOT EXISTS `product` (
  2. `id_product` INT(11) NOT NULL,
  3. `indeks` VARCHAR(255) NULL,
  4. PRIMARY KEY (`id_product`))
  5. ENGINE = InnoDB;
  6.  
  7.  
  8. CREATE TABLE IF NOT EXISTS `numbers` (
  9. `id_number` INT(11) NOT NULL,
  10. `indeks` VARCHAR(255) NOT NULL,
  11. PRIMARY KEY (`id_number`),
  12. INDEX `fk_product_numbers_product2_idx` (`indeks` ASC),
  13. CONSTRAINT `fk_product_numbers_product2`
  14. FOREIGN KEY (`indeks`)
  15. REFERENCES `product` (`indeks`)
  16. ON DELETE NO ACTION
  17. ON UPDATE NO ACTION)
  18. ENGINE = InnoDB;
  19.  



Bład:

  1. #1005 - Can't create table 'cdcol.numbers' (errno: 150)
  2. Mechanizmy składowania InnoDB
  3. Supports transactions, row-level locking, AND FOREIGN KEYS
nospor
Brakuje klucza/indeksu w tabeli produkt na pole indeks
netvalue
dzięki Nospor !
nospor
Proszę.

A możesz opisać słownie co to ma robić i czemu to ma służyć? Bo na chwilę obecną wygląda to tak trochę bez sensu.
netvalue
indeks to unikalny varchar dla produktu , w tabeli numbers dojda jeszcze kolejne pola jak foreign_nr
Chodzi o to zeby wyswietlac dla produktu jego inne numery (foreign_nr)
nospor
Cytat
Chodzi o to zeby wyswietlac dla produktu jego inne numery
No dobra, to po co ci do tego indeks? Czemu nie skorzystasz z id_product?
netvalue
poniewaz bazuje na gotowych danych i nie mam powiazania id_product
nospor
Ale dodajac dany produkt do swojej bazy, już masz id_product.

Dobra, nie wnikam wiecej smile.gif
netvalue
dane do tabelki products i number mam juz gotowe i nie mam mozliwosci polaczyc ich inaczej niz po przez indeks
nospor
Co to znaczy "gotowe"?
Jesli importujesz je z jakiegoś xls czy csv czy xml, to wkladajac je do swojej bazy masz id_product i mozesz spokojnie przez to łączyc z tabelą number. Oszczedzisz miejsca i czasu.

Ale jesli nie chcesz tak robic, to nie ma sensu dalej nad tym dyskutowac 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.