PHP / MySQL - indeksler bir liste ile, çeşitli tablolar SELECT

3 Cevap php

hugh soru ile im ...

İşte senaryo.

Bir timeclock sisteminin geliştirilmesi im, ben bu tabloları vardır:

-punch (id_punch,date)
-in1 (id_in1,time,id_punch,...)
-in2 (id_in2,time,id_punch,...)
.
-in6  (id_in6,time,id_punch,...)
-out1 (id_out1,time,id_punch,...)
-out2 (id_out2,time,id_punch,...)
.
-out6 (id_out6,time,id_punch,...)

Benim soru Exemple için, id_punch değerler listesinden, tablo ve dışında tüm değerleri almak için nasıl i can PHP tek bir sorgu ile olduğunu:

Get all punchs of september. or Get all punchs of july to dezember,

Yani ... İki tarih arasındaki id_punch listesinden, in, dışarı tablodan tüm sonuçları almak.

The only way i think is to do a query with each id_punch variable, but in a month its about 20-25 queries... to much dont? Tkz Roberto

3 Cevap

Eğer gerçekten bir çocuk bir tablodaki tüm giriş / çıkış verileri saklamak gerekiyor punch:

CREATE TABLE punch (
  id_punch SERIAL PRIMARY KEY,
  punch_date DATE NOT NULL,
  ip_address INT UNSIGNED NOT NULL
  -- plus other attributes
) ENGINE=InnoDB;

CREATE TABLE inout (
  id_punch BIGINT UNSIGNED,
  in_time TIME NOT NULL,
  out_time TIME NULL,
  PRIMARY KEY (id_punch, in_time),
  FOREIGN KEY (id_punch) REFERENCES punch (id_punch)
) ENGINE=InnoDB;

Şimdi Eylül ayında tüm vuruşlar için çok kolay sorgulayabilirsiniz:

SELECT *
FROM punch LEFT OUTER JOIN inout USING (id_punch)
WHERE EXTRACT(YEAR_MONTH FROM punch_date) = '200909';

Sizin veritabanı şeması biraz belirsiz olduğunu, ancak sonuç kimlikleri listesine karşılık almak için nasıl soruyorsun eğer zaten bu (sizin kimlikleri 1,3,5,7,9 olduğunu varsayarsak) çalışması gerekir

SELECT * FROM table1, table2, table 3
WHERE table1.punch_id = table2.punch_id AND table2.punch_id = table3.punch_id AND table3.punch_id IN (1,3,5,7,9)

muhtemelen sadece emin, her tablonun punch_id kısıtlama IN olduğu için katıldığı yapmak değiştirmeniz gerekir

I her yumruk bazı bilgiler var çünkü ben ipadresi, ve diğer bilgiler gibi, tek bir tablo kullanabilirsiniz olamaz.

Neil cevap burnuma, ben zaten sizinki gibi bir çözüm gördüm, ama benim şüphesiz bu listeyi "doldurmak" için php bir foreach () kullanın = benim kendi soru için sorgu, cevap listesine koymak nasıl. ..

Gibi bir şey:

> SELECT * FROM table1, table2, table 3 WHERE table1.punch_id = table2.punch_id AND table2.punch_id = table3.punch_id AND table3.punch_id IN (<? foreach($query->results() as $row) echo $row->id_punch;?>)

im CodeIgniter'ı kullanarak